これは、QRコードを生成し、Javaで塩セキュアハッシュ文字列を使用する方法のステップのチュートリアルバイステップです。
まず、あなたはQRコードがライブラリを処理できる必要がある、私は使いやすいので(それはそれの周りのコミュニティです)、ゼブラクロッシング(「ZXing」)ライブラリを使用することにしました。次の依存関係ののpom.xmlを追加します。
<依存性> <のgroupId> com.google.zxing </のgroupId> <たartifactId>コア</たartifactId> <バージョン> 3.4。0 </バージョン> </依存> <依存性> <のgroupId> com.google.zxing </のgroupId> <たartifactId>するJavaSE </たartifactId> <バージョン> 3.4。0 </バージョン> </依存関係>
ライブラリは、生成したコードを読むためのさまざまな機能を提供します。私にとってこのユースケースで十分です、私は単純なJSONオブジェクトを使用してQRコードを生成する必要があります。
公共の バイト[] qrCodeGenerator(文字列ID)がIOExceptionが、スロー WriterException、 InvalidKeySpecException指定、 持つNoSuchAlgorithmException { 文字列filePathに = " QRCode.pngを" 。 文字列の文字セット = " UTF-8 " ; 地図hintMap = 新しいHashMapの(); hintMap.put(EncodeHintType.ERROR_CORRECTION、ErrorCorrectionLevel.L)。 地図 <文字列、文字列> qrCodeDataMap = Map.of( " 名前" 、ID、 " キー" 、keyProvider.generateVerificationKey(ID) // 'generateVerificationKey'方法については、次のセクションを参照してください )。 文字列jsonString = 新しいJSONObject(qrCodeDataMap).toString(); createQRCode(jsonStringファイルパス、文字セット、hintMap、500、500 )。 BufferedImageのイメージ = ImageIO.read(新しいファイル(filePathに)); ByteArrayOutputStreamたBAO = 新しいByteArrayOutputStream(); ImageIO.write(画像、" PNG "、BAOを)。 バイト []画像データ= baos.toByteArray()。 返す画像データを、 } プライベート ボイドcreateQRCode(文字列qrCodeData、 列filePathに、 文字列の文字セット、 地図hintMap、 INT qrCodeHeight、 INT qrCodeWidth)はWriterException、スロー にIOException { BitMatrixマトリックスは = 新しいMultiFormatWriterを()。(エンコード 新しい文字列(qrCodeData.getBytes(文字セット)、文字セット) 、 BarcodeFormat.QR_CODE、 qrCodeWidthを qrCodeHeight、 hintMap )。 MatrixToImageWriter.writeToPath( マトリックス、 filePath.substring(filePath.lastIndexOf(' ')+ 1 )、 FileSystems.getDefault()ある、getPath(filePathに)。 )。 }
また、面白い小さなことJSONObjectことに注意してください:JSONオブジェクトにJavaのハッシュマップを使用して。時には、あなたがデータ構造を構築したいの方法は非常に簡単、そしてJSONに、次にシリアル化され:
地図<文字列、文字列> qrCodeDataMap = Map.of( " 名前"、" SampleText " 、 " キー"、" SomeHashedValue " );
文字列jsonString =新しいJSONObject(qrCodeDataMap).toString();
JSONObjectクラスを使用することができるようにするために、あなたはあなたのpom.xmlに以下の依存関係を追加する必要があります。
<依存>
<groupIdを> org.json </ groupIdを>
<たartifactId> JSON </たartifactId>
<バージョン> 20180813 </バージョン>
</依存関係>
あなたがより単純化されたインタフェースを探しているなら、あなたはまた、さらにJavaのQRコード生成APIのために簡略化、およびZXing上に構築することができます主張QRGenを、表示されることがあります。しかし、私の場合には、全く問題はZXingません。
ハッシュ文字列
今、私はすぐに安全な方法文字列をハッシュ化することができるようにする必要があります。このような理由から、私は、JavaのためにOWASPが推奨する方法を使用することにしました。このメソッドを実装するには、のpom.xmlを更新する必要があります。
<依存性>
<のgroupId>コモンズコーデック</のgroupId>
<たartifactId>コモンズコーデック</たartifactId>
<バージョン> 1.12 </バージョン>
</依存>
ここでの方法の(幾分簡略化された)のJava実装は、次のとおりです。
パブリック文字列generateVerificationKey(文字列str)を持つNoSuchAlgorithmException、スロー InvalidKeySpecException指定{ int型反復= 10000 。 INT KEYLENGTH = 512 。 CHAR [] strChars = str.toCharArray()。 バイト [] saltBytes = salt.getBytes()。 するSecretKeyFactory SKF = SecretKeyFactory.getInstance(" PBKDF2WithHmacSHA512 " )。 PBEKeySpecスペック = 新しいPBEKeySpec(strChars、saltBytes、イテレーション、KEYLENGTH)。 SecretKeyキー =skf.generateSecret(スペック)。 バイト [] hashedBytes = key.getEncoded()。 返すHex.encodeHexString(hashedBytesを)。 }