Когда я пытаюсь преобразовать кодовую форму Java в C #, у меня возникает большая проблема с EncryptFunction.
У меня есть этот код в Java:
private String KEY_PRIVATE_HP = "__hpcSecretKey__";
private IvParameterSpec getIvParameterSpec() {
byte[] empty = new byte[16];
return new IvParameterSpec(empty);
}
private String encryptBin(String value) {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY_PRIVATE_HP.getBytes("UTF-8"),"AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, getIvParameterSpec());
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.encodeToString(encrypted, Base64.NO_WRAP);
}
И я преобразовал его в C # так:
static string KEY_PRIVATE_HP = "__hpcSecretKey__";
public static string encryptBin(string value)
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = 0x80;
rijndaelCipher.BlockSize = 0x80;
byte[] pwdBytes = Encoding.UTF8.GetBytes(KEY_PRIVATE_HP);
byte[] keyBytes = new byte[0x10];
int len = pwdBytes.Length;
if (len > keyBytes.Length)
{
len = keyBytes.Length;
}
Array.Copy(pwdBytes, keyBytes, len);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = keyBytes;
ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
byte[] plainText = Encoding.UTF8.GetBytes(value);
return Convert.ToBase64String(transform.TransformFinalBlock(plainText, 0, plainText.Length));
}
Но когда я отлаживаю в C # и Java вместе, это приводит к другому результату.
Что не так?