我需要使用盐和密钥加密字符串以匹配 java 加密,以便第 3 方提供者可以解密另一端的值。
我已经尝试了几篇 StackOverflow 文章,因为我不是加密专家,只是无法使用 SALT 和 KEY 作为第 3 方提供商获得相同的加密字符串。
我需要知道 C# 中使用哪种加密类型和模式来匹配这里使用的 java 的 AES 加密
我需要使用盐和密钥加密字符串以匹配 java 加密,以便第 3 方提供者可以解密另一端的值。
我已经尝试了几篇 StackOverflow 文章,因为我不是加密专家,只是无法使用 SALT 和 KEY 作为第 3 方提供商获得相同的加密字符串。
我需要知道 C# 中使用哪种加密类型和模式来匹配这里使用的 java 的 AES 加密
好的-即使在一定程度上作弊,我也想通了。因为我找不到任何与第 3 方提供的纯 AES 加密相匹配的加密技术,所以我要求他们将其更改为
密码密码 = Cipher.getInstance("AES/CBC/PKCS5Padding");
有了这个,我修改了我的 C# 代码并最终使集成工作:
public static string Encrypt2(string plainText)
{
string PassPhrase = "somepassphrase";
string SaltValue = "somesalt";
int PasswordIterations = 0; //amend to match java encryption iteration
string InitVector = "someiv";
int KeySize = 0; //amend to match java encryption key size
byte[] initVectorBytes = Encoding.ASCII.GetBytes(InitVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(SaltValue);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
Rfc2898DeriveBytes password = new Rfc2898DeriveBytes(
PassPhrase,
saltValueBytes,
PasswordIterations);
byte[] keyBytes = password.GetBytes(KeySize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(
keyBytes,
initVectorBytes);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
encryptor,
CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherTextBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
string cipherText = Convert.ToBase64String(cipherTextBytes);
return cipherText;
}