在实现 java 的 des 加密方式时 遇到一些问题
加密方式为"DES/CBC/PKCS5Padding"
java 代码是这样的
public static String EncryptDES(String encryptString, String encryptKey)
{
String ret = "";
try
{
byte[] key = encryptKey.getBytes("UTF-8");
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(new byte[8]);
cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);
byte[] src = encryptString.getBytes("UTF-8");
src = cipher.doFinal(src);
BASE64Encoder enc=new BASE64Encoder();
ret = enc.encode(src);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
System.out.println(ex.getStackTrace());
ret = encryptString;
}
return ret;
}
文档写的是初始化向量是空向量 我查了查文档 用 ruby 实现的代码是
require 'openssl'
require 'base64'
def encrypt(str,key)
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
cipher.encrypt
cipher.pkcs5_keyivgen(key)
result = cipher.update(str) + cipher.final
Base64.encode64(result)
end
问题可能是 iv 设置上 ruby 和 java 有一些不同。。有没有什么建议的方式 实现这玩意啊。。
哦对了,测试 时 明文为 '123456' ,key 为'4B40A73D' 时,密文为‘2OdZEBDuPzQ=’
求建议。。。