Exception: Input length must be multiple of 8 when decrypting with padded cipher
-
public static String encryptToDES(String info) {
-
SecretKey key = createSecretKey("DES", KEY);
-
// 定义 加密算法,可用 DES,DESede,Blowfish
-
String Algorithm = "DES";
-
// 加密随机数生成器 (RNG),(可以不写)
-
//SecureRandom sr = new SecureRandom();
-
// 定义要生成的密文
-
byte[] cipherByte = null;
-
try {
-
// 得到加密/解密器
-
Cipher c1 = Cipher.getInstance(Algorithm);
-
// 用指定的密钥和模式初始化Cipher对象
-
// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
-
c1.init(Cipher.ENCRYPT_MODE, key);
-
// 对要加密的内容进行编码处理,
-
cipherByte = c1.doFinal(info.getBytes());
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
if (cipherByte == null) {
-
return "";
-
} else {
-
return byteArrayToString(cipherByte); //不能用new String(byte[]),这样会改变在decrypt时byte[]已经改变了,会报错误
-
}
-
-
}
-
-
public static String decryptByDES(String s) {
-
byte[] sInfo = stringToByteArray(s);
-
SecretKey key = createSecretKey("DES", KEY);
-
// 定义 加密算法,
-
String Algorithm = "DES";
-
// 加密随机数生成器 (RNG)
-
//SecureRandom sr = new SecureRandom();
-
byte[] cipherByte = null;
-
try {
-
// 得到加密/解密器
-
Cipher c1 = Cipher.getInstance(Algorithm);
-
// 用指定的密钥和模式初始化Cipher对象
-
c1.init(Cipher.DECRYPT_MODE, key);
-
// 对要解密的内容进行编码处理
-
cipherByte = c1.doFinal(sInfo);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
// return byte2hex(cipherByte);
-
//System.out.println(cipherByte);
-
if (cipherByte == null) {
-
return "";
-
} else {
-
return new String(cipherByte);
-
}
-
}
以上代码还是会出现问题,问题可能很难遇到,那就是在
byteArrayToString方法中,一定要转好,不能直接把byte做一个char,如果这个char正好是"回车"那就麻烦了,我的做法是就把byte值存下来,并用:分隔,用时再转换成byte数组
-
for (int i = 0; i < barray.length; i++) {
-
s += barray[i];
-
if (i != barray.length - 1) {
-
s += ":";
-
}
-
}
阅读(1097) | 评论(0) | 转发(0) |