一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 如何使用Java生成具有安全哈希的QR碼

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

2019-06-29 16:23Java_蘇先生 Java教程

這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下

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

首先,需要一個可以處理QR碼的庫,我決定使用Zebra Crossing(“ZXing”)庫,因為它簡單易用(即有圍繞它的社區)。添加以下依賴項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>

該庫為生成和讀取代碼提供了相當廣泛的功能。這對我的用例來說已經足夠了,我只需要生成一個帶有簡單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將哈希映射轉換為JSON對象。有時,以您希望的方式構建數據結構要容易得多,然后序列化為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,并且構建在ZXing之上。但是,在我的情況下,ZXing絕對沒問題。

哈希字符串

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

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

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

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);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • Java教程JAVA中通過自定義注解進行數據驗證的方法

    JAVA中通過自定義注解進行數據驗證的方法

    java 自定義注解驗證可自己添加所需要的注解,下面這篇文章主要給大家介紹了關于JAVA中通過自定義注解進行數據驗證的相關資料,文中通過示例代碼介紹...

    Decouple6362021-05-25
  • Java教程JavaWeb 實現驗證碼功能(demo)

    JavaWeb 實現驗證碼功能(demo)

    在 WEB-APP 中一般應用于:登錄、注冊、買某票、秒殺等場景,大家都接觸過這個驗證碼操作,今天小編通過實例代碼給大家講解javaweb實現驗證碼功能,需要...

    java教程網12832020-08-05
  • Java教程java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關資料,需要的朋友可以參考下...

    Java之家3092020-08-13
  • Java教程springboot ehcache 配置使用方法代碼詳解

    springboot ehcache 配置使用方法代碼詳解

    EhCache是一個比較成熟的Java緩存框架,Springboot對ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也簡易,今天給大家分享spri...

    m1719309529412912021-09-16
  • Java教程淺談Java(SpringBoot)基于zookeeper的分布式鎖實現

    淺談Java(SpringBoot)基于zookeeper的分布式鎖實現

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    LJY_SUPER5742021-07-21
  • Java教程Java之Springcloud Feign組件詳解

    Java之Springcloud Feign組件詳解

    這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    深情以改10322021-11-12
  • Java教程Java list.remove( )方法注意事項

    Java list.remove( )方法注意事項

    這篇文章主要介紹了Java list.remove( )方法注意事項,非常簡單易懂,需要的朋友可以參考下...

    妖久9552021-05-25
  • Java教程SpringBoot引入Thymeleaf的實現方法

    SpringBoot引入Thymeleaf的實現方法

    這篇文章主要介紹了SpringBoot引入Thymeleaf的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Bobby6472021-07-28
主站蜘蛛池模板: 日韩国产欧美一区二区三区 | 3d动漫被吸乳羞羞 | 精品日韩欧美一区二区三区 | 午夜第一页 | 99久久国产综合精品女小说 | 美女女女女女女bbbbbb毛片 | 俄罗斯美女毛茸茸bbwbbw | 国产精品亚洲午夜不卡 | 亚洲一卡2卡三卡4卡5卡组 | 国产手机在线观看 | 国产精品suv| 日韩专区 | 好姑娘在线观看完整版免费 | 成人在线第一页 | 4438全国免费观看 | 国产二区三区 | 欧美亚洲第一区 | 国产一精品一av一免费爽爽 | 91亚色视频在线观看 | 国内精品视频一区二区三区八戒 | 好奇害死猫在线观看 | v视界影院成片 | 花唇肿胀无法合拢双性 | 美女被吸乳得到大胸 | 国产成人精品一区二三区2022 | 天天色天天色天天色 | 久久99热成人精品国产 | 国产成人高清亚洲一区91 | 成年人在线播放视频 | 天堂一区二区在线观看 | 亚洲AV无码专区国产精品麻豆 | 息与子中文字幕完整在线 | 好男人天堂网 | 国产中文在线视频 | 国产91精品久久久久久 | 扒开女人下面使劲桶屁股动漫 | 99国内精品久久久久久久黑人 | 成年人免费在线看的惊悚动作片 | 男人狂躁女人下面狂叫图片 | 亚洲国产精品综合一区在线 | 亚洲第一综合网站 |