我已要求加密一些数据,他送我以下细节有关加密算法:AES256 JAVA加密不匹配,C#加密
- 算法:AES256
- 密钥大小:256位
- 加密模式:CBC(16个比特的块,其中0 PKCS5Padding)
- 输出类型:BASE-64
- 密码:0xA8703827AE586460105696504327B7BB0806FEAE96BD664F89E36868FBB48E3D
- IV:是一个字节[16]与0值
我用下面的代码,但是我没有得到与他匹配的结果:
public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
byte[] encryptedBytes = null;
byte[] saltBytes = new byte[16] { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.KeySize = 256;
aes.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
aes.Key = key.GetBytes(aes.KeySize/8);
aes.IV = key.GetBytes(aes.BlockSize/8);
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
cs.Close();
}
encryptedBytes = ms.ToArray();
}
}
return encryptedBytes;
}
public string EncryptText(string input, string password)
{
byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
string result = Convert.ToBase64String(bytesEncrypted);
return result;
}
所以,当我们试图加密你好, 你好吗?,我得到了不同的结果,我应该得到和他一样的结果,因为他会解密我发送的数据,并且会处理它。给出的例子应该有这样的结果:TJTojNoVgoqnhCj4uTv1jLBiZU7r+s/0Bm234bHU+S0=
您需要提供java代码才能找出他们不同意的原因。 –
客户端提到[this](https://dzone.com/articles/aes-256-encryption-java-and),如果你找不到这个就够了,请让我知道问他更多的信息 –
正如你可以清楚地看到你自己这是你的代码和代码之间的巨大差异,特别是在密钥和IV的推导中。 –