2012-01-18 32 views
0

Javaで埋め込みを行わずにCBCモードでBlowfish暗号化を使用して特定のStringを暗号化する必要があります。私はいくつかの研究を行っており、この質問を見つけました:encrypting and decrypting using javaJavaでCBCモードでBlowfishを使用した暗号化

私は、Cipherオブジェクトのinitメソッドで基本的なStringをキーとして使用する方法を知りたいと思います。この例では、keySpecはStringではなく、SHA-256で暗号化されたStringです。例では

keySpecは私が必要なもの SecretKeySpecオブジェクト

ある

cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); 

:私が使用していることを知っているkeyStringStringオブジェクト

ある

cipher.init(Cipher.ENCRYPT_MODE, keyString, ivSpec); 

基本的なストライngは自動生成よりも安全性が低くなります。しかし、私はどのようにキーとして文字列を使用できるか知っていますか?

答えて

0

これは機能しますか?

SecretKey secretKey = new SecretKeySpec(keyString.getBytes(charset), "Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); 
+0

私が試みたが、私はエラーがあります。私はときに「8バイトの入力の長さではない複数の」: バイト[]、暗号化= cipher.doFinal(token.getBytes())。 トークンの長さは8バイトの倍数である必要がありますか? – litil

+1

私はブローフィッシュの専門家ではなく、インターネットは今日ストライキに乗っているので、すぐには1つにはならないが、afaikブローフィッシュには少なくとも32ビットのキーが必要です。しかし、8バイトの最小要件はかなり一般的です。なぜ私はあなたがそのような短いキーを使用する必要があるのか​​尋ねることができますか? – wallenborn

+0

私のエラーが見つかりました。暗号化しようとする文字列には22文字が含まれ、その長さは8の倍数でなければなりません。したがって、パディングを使用する必要があると思います。どちらを使うべきですか? (私はPERLの標準のパディングと同じものを使用しなければならない) – litil