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

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

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
主站蜘蛛池模板: 莫莉瑞典1977k | 色人阁导航 | 精品国产综合区久久久久久 | 大香焦在线观看 | 国产男女爱视频在线观看 | 国产精品99在线观看 | chinese军人@gay | 精品国产免费久久久久久婷婷 | 亚洲精品人成网在线播放影院 | 香蕉国产成版人视频在线观看 | 亚洲国产精品久久久久久网站 | 奇米影视久久777中文字幕 | 金发美女与黑人做爰 | 欧美专区在线观看 | 三年片韩国在线 | 四虎影院精品在线观看 | 久久亚洲电影www电影网 | 图片专区亚洲欧美另类 | 欧美在线视频一区 | 久久综合亚洲色hezyo | 亚洲天天做夜夜做天天欢 | 国产成人综合手机在线播放 | 波多野结衣无码 | 四虎黄色影视 | 欧美同性videos| 91精品国产麻豆国产自产在线 | 34看网片午夜理 | 特黄级 | 小小水蜜桃视频高清在线观看免费 | 天堂在线中文无弹窗全文阅读 | 草莓影音| 好大好硬好深好爽想要之黄蓉 | 午夜性色一区二区三区不卡视频 | 青草久久伊人 | 亚洲成人黄色 | 日本一区免费观看 | 国产欧美一区二区精品久久久 | 亚洲精品91 | 久青草国产在视频在线观看 | 黄 在线播放 | 無码一区中文字幕少妇熟女网站 |