【发布时间】:2016-11-20 13:46:21
【问题描述】:
我正在使用下面的代码来实现带有 ECB 和 PKSC5 填充的三重 DES 编码。我使用的密钥存储在原始文件夹中名为 key 的文件中。我遇到了异常-
java.security.InvalidKeyException: key size must be 128 or 192 bits
为什么会出现这个异常,我哪里出错了?
public byte[] encrypt(String message) throws Exception {
getResources().getIdentifier("key",
"raw", getPackageName());
byte[] bytes = new byte[1024];
try {
BufferedInputStream buf = new BufferedInputStream(getResources().openRawResource(
getResources().getIdentifier("key",
"raw", getPackageName())));
buf.read(bytes, 0, bytes.length);
buf.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final SecretKey key = new SecretKeySpec(bytes, "DESede/ECB/PKCS5Padding");
final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key);
final byte[] plainTextBytes = message.getBytes("utf-8");
final byte[] cipherText = cipher.doFinal(plainTextBytes);
return cipherText;
}
【问题讨论】:
-
这个异常再清楚不过了。
-
-
@Bhuvi 不要使用 ECB 模式,它不安全,请参阅ECB mode,向下滚动到企鹅。而是使用带有随机 IV 的 CBC 模式,只需在加密数据前加上 IV 以用于解密。 3DES 也不能用于新作品。
标签: android encryption 3des ecb pkcs#5