次のコードを使用してデータを暗号化しています
final SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(),
"AES");
final String myIV = "89ABCDEF01234567";
Cipher c = null;
try {
try {
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
c.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(
myIV.getBytes()));
byte[] encrypted = c.doFinal(msgfromEB.getBytes(),0,msgfromEB.getBytes().length);
そして、私はこのように解読しています
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(
myIV.getBytes()));
byte[] decryptedBytes = c.doFinal(encrypted ,0,encrypted .length);
System.out.println("decrypted string is"+new String(decryptedBytes));
正常に暗号化および復号化できます。
しかし、このような文字列に変換する場合
String myString = new String (encrypted);
そして再びこのようなバイト配列を取得します
byte[] newbytearray = myString.getBytes();
今、私は解読しようとしています
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(
myIV.getBytes()));
byte[] decryptedBytes = c.doFinal(newbytearray ,0,newbytearray .length);
System.out.println("decrypted string is"+new String(decryptedBytes));
今、エラーが発生しています
javax.crypto.IllegalBlockSizeException: 復号化で最後のブロックが不完全です
base64 変換を使用している場合は正常に動作していますが、長さが長くなるため、実行したくありません。これを克服するための他の選択肢はありますか?