使用Java生成具有安全雜湊的QR碼 | Rustam Mehmandarov
這是關於如何在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); } |
相關文章
- 安全的雜湊
- 使用ABAP程式碼生成二維碼(QR Code)
- 雜湊表的程式碼實現(Java)Java
- Hash,雜湊,雜湊?
- Android facebook KeyHash生成(生成釋出金鑰雜湊)Android
- JAVA 實現 - 雜湊表Java
- js 雜湊雜湊值的模組JS
- Fortran雜湊函式庫的使用函式
- mysql中雜湊索引的使用限制MySql索引
- 七夕也要學起來,雜湊雜湊雜湊!
- Java集合原始碼分析之基礎(二):雜湊表Java原始碼
- 使用ABAP建立QR Code(二維碼)
- 雜湊
- Amazing QR!一款 Python 二維碼生成器!Python
- Go Web 程式設計--使用 bcrpyt 雜湊使用者密碼GoWeb程式設計密碼
- 雜湊表(雜湊表)原理詳解
- 【尋跡#3】 雜湊與雜湊表
- Hasher for Mac(雜湊值生成器)v1.4Mac
- 雜湊遊戲原始碼開發搭建丨hash雜湊遊戲競猜原始碼搭建丨雜湊遊戲系統開發遊戲原始碼
- 雜湊競猜開發原理丨雜湊競猜遊戲原始碼丨雜湊競猜系統開發設計程式碼遊戲原始碼
- HASH雜湊遊戲原始碼丨HASH雜湊遊戲系統開發丨HASH雜湊遊戲開發成品原始碼部署原始碼遊戲開發
- 程式碼安全測試第四期:可逆的單向雜湊漏洞
- 從Dictionary原始碼看雜湊表原始碼
- 藉助前端技術構建QR碼生成器API前端API
- 雜湊表的原理
- 【六褘-Java】雜湊演算法記憶體圖;set集合低層採用雜湊表儲存元素;雜湊演算法的流程Java演算法記憶體
- 資料庫裡賬號的密碼,需要怎樣安全的存放?—— 密碼雜湊(Password Hash)資料庫密碼
- JAVA資料結構之雜湊表Java資料結構
- 雜湊索引索引
- 樹雜湊
- 2024.3.26 雜湊
- 雜湊碰撞
- 字串雜湊字串
- 雜湊表
- 幾道和雜湊(雜湊)表有關的面試題面試題
- 雜湊遊戲之雜湊盒子的趨勢未來可期遊戲
- 小巧實用的二維碼製作生成工具:QR Creator PRO Mac版Mac
- Python 生成條形碼、二維碼 (Code 128、EAN-13、QR code等)Python