我有以下代码,用于解密DES加密后的Java
编码报文.
try
{
byte[] key = new String(keyString).getBytes();
byte[] enc = Base64.getDecoder().decode(encryptedMessage);
SecretKey generateSecret = SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec(key));
Cipher cipher = Cipher.getInstance("DES");
cipher.init(2, generateSecret);
String dec = new String(cipher.doFinal(enc));
}
catch (Exception ex)
{
}
我想把它移植到C#中.不过,我不确定如何处理SecretKey generateSecret = SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec(key));
.下面是我用于DES解密的C#
代码:
byte[] enc = Convert.FromBase64String(encryptedMessage);
byte[] key = Encoding.UTF8.GetBytes(keyString);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = key;
ICryptoTransform desDecrypt = des.CreateDecryptor();
byte[] result = desDecrypt.TransformFinalBlock(enc, 0, enc.Length);
return Encoding.UTF8.GetString(result);
}
我的值keyString
超过30个字节,des.Key
需要8个字节.在阅读new DESKeySpec()
的文档时,我发现它占用了前8个字节.因此,我将这8个字节用作des.Key
的键,代码崩溃并抱怨填充问题.所以,我意识到这不是处理这件事的方法.我不知道该如何处理这件事.非常感谢您的信息.