我得到了需要转换为C#的Java加密代码。我想我很接近...但是我不确定如何重复IV计算...有什么帮助吗?
Java代码:
public static string getAESencodingResult(String sSrc, String encrypt_key)
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = encrypt_key.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(encrypt_key.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);
}
C#代码:
static string EncryptStringToBytes(string plainText, byte[] key)
{
byte[] encrypted;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = key;
// rijAlg.IV = ???
rijAlg.GenerateIV();
rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.Mode = CipherMode.CBC;
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
if (plainText.Length < 16)
{
for (int i = plainText.Length; i < 16; i++)
swEncrypt.Write((byte)0x0);
}
swEncrypt.Flush();
csEncrypt.FlushFinalBlock();
encrypted = msEncrypt.ToArray();
}
}
return Convert.ToBase64String(encrypted);
}
如果我不误解Java代码,则只需将键值也分配给IV:
rijAlg.Key = key;
rijAlg.IV = key;
并删除GenerateIV行:
rijAlg.GenerateIV();
我知道您不受Java代码的控制,因此无法解决此问题,但对将来的读者来说:每次加密内容时都不应使用相同的IV。有关更多信息,请参见此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句