最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Java生成具有安全哈希的QR碼

 更新時間:2019年06月19日 11:02:29   作者:Java_蘇先生  
這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下

這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。

首先,需要一個可以處理QR碼的庫,我決定使用Zebra Crossing(“ZXing”)庫,因為它簡單易用(即有圍繞它的社區(qū))。添加以下依賴項pom.xml:

<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.0</version>
</dependency>

該庫為生成和讀取代碼提供了相當廣泛的功能。這對我的用例來說已經(jīng)足夠了,我只需要生成一個帶有簡單JSON對象的QR代碼:

public byte[] qrCodeGenerator(String id) throws IOException, 
WriterException, 
InvalidKeySpecException, 
NoSuchAlgorithmException {
String filePath = "QRCode.png";
String charset = "UTF-8";
Map hintMap = new HashMap();
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
Map<String, String> qrCodeDataMap = Map.of(
"Name", id,
"Key", keyProvider.generateVerificationKey(id) 
// see next section for ´generateVerificationKey´ method
);
String jsonString = new JSONObject(qrCodeDataMap).toString();
createQRCode(jsonString, filePath, charset, hintMap, 500, 500);
BufferedImage image = ImageIO.read(new File(filePath));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
byte[] imageData = baos.toByteArray();
return imageData;
}
private void createQRCode(String qrCodeData, 
String filePath, 
String charset, 
Map hintMap, 
int qrCodeHeight, 
int qrCodeWidth) throws WriterException, 
IOException {
BitMatrix matrix = new MultiFormatWriter().encode(
new String(qrCodeData.getBytes(charset), charset),
BarcodeFormat.QR_CODE,
qrCodeWidth,
qrCodeHeight,
hintMap
);
MatrixToImageWriter.writeToPath(
matrix,
filePath.substring(filePath.lastIndexOf('.') + 1),
FileSystems.getDefault().getPath(filePath)
);
}

還要注意有趣的小東西 JSONObject:是使用Java將哈希映射轉(zhuǎn)換為JSON對象。有時,以您希望的方式構(gòu)建數(shù)據(jù)結(jié)構(gòu)要容易得多,然后序列化為JSON:

Map<String, String> qrCodeDataMap = Map.of(
"Name", "SampleText",
"Key", "SomeHashedValue"
);

String jsonString = new JSONObject(qrCodeDataMap).toString();    

為了能夠使用JSONObject類,您需要將以下依賴項添加到您的pom.xml:

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>

如果您正在尋找更簡化的接口,您可能還會查看QRGen,它聲稱可以進一步簡化用于Java的QR代碼生成API,并且構(gòu)建在ZXing之上。但是,在我的情況下,ZXing絕對沒問題。

哈希字符串

現(xiàn)在,我需要能夠以快速安全的方式哈希加密字符串。為此,我決定使用OWASP for Java建議的方法。要實現(xiàn)此方法,您需要首先更新pom.xml:

<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>

這里是Java中所述方法的(有些簡化)實現(xiàn):

public String generateVerificationKey(String str) throws NoSuchAlgorithmException,
InvalidKeySpecException {
int iterations = 10000;
int keyLength = 512;
char[] strChars = str.toCharArray();
byte[] saltBytes = salt.getBytes();
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
PBEKeySpec spec = new PBEKeySpec(strChars, saltBytes, iterations, keyLength);
SecretKey key = skf.generateSecret( spec );
byte[] hashedBytes = key.getEncoded( );
return Hex.encodeHexString(hashedBytes);
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    這篇文章主要介紹了Java版超大整數(shù)階乘算法代碼詳解-10,0000級,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • flink進階富函數(shù)生命周期介紹

    flink進階富函數(shù)生命周期介紹

    這篇文章主要為大家介紹了flink進階富函數(shù)生命周期的舉例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • JavaSE-面向?qū)ο?方法重寫)

    JavaSE-面向?qū)ο?方法重寫)

    子類在調(diào)用父類的私有方法中不能直接調(diào)用,但是可以通過get方法進行調(diào)用,修改屬性的值可以通過set方法進行修改。而子類想要修改父類中的方法可以使用方法重寫進行操作。
    2021-08-08
  • 非常適合新手學(xué)生的Java線程池超詳細分析

    非常適合新手學(xué)生的Java線程池超詳細分析

    作者是一個來自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門
    2022-03-03
  • spring?controller層引用service報空指針異常nullpointExceptio問題

    spring?controller層引用service報空指針異常nullpointExceptio問題

    這篇文章主要介紹了spring?controller層引用service報空指針異常nullpointExceptio問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot使用EmbeddedDatabaseBuilder進行數(shù)據(jù)庫集成測試

    SpringBoot使用EmbeddedDatabaseBuilder進行數(shù)據(jù)庫集成測試

    在開發(fā)SpringBoot應(yīng)用程序時,我們通常需要與數(shù)據(jù)庫進行交互,為了確保我們的應(yīng)用程序在生產(chǎn)環(huán)境中可以正常工作,我們需要進行數(shù)據(jù)庫集成測試,在本文中,我們將介紹如何使用 SpringBoot 中的 EmbeddedDatabaseBuilder 來進行數(shù)據(jù)庫集成測試
    2023-07-07
  • java多線程編程實例

    java多線程編程實例

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下。
    2017-11-11
  • Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法示例

    Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法示例

    這篇文章主要介紹了Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法,涉及java類型轉(zhuǎn)換、遍歷、比較等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java異常處理機制try catch流程詳解

    Java異常處理機制try catch流程詳解

    這篇文章主要介紹了Java異常處理機制try catch流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring Boot如何配置內(nèi)置Tomcat的maxPostSize值

    Spring Boot如何配置內(nèi)置Tomcat的maxPostSize值

    這篇文章主要介紹了Spring Boot如何配置內(nèi)置Tomcat的maxPostSize值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

揭阳市| 井研县| 平乡县| 关岭| 兴义市| 武宁县| 玉门市| 九龙城区| 师宗县| 嵊州市| 广安市| 浦北县| 赫章县| 永年县| 平远县| 东兴市| 临沭县| 诸暨市| 彩票| 武强县| 三穗县| 汝城县| 六安市| 姜堰市| 安徽省| 阳曲县| 姚安县| 诸暨市| 文安县| 乌海市| 博爱县| 平陆县| 广水市| 湾仔区| 临漳县| 加查县| 长兴县| 合川市| 噶尔县| 万全县| 瑞安市|