.net AES 256加密

.net AES 256加密,.net,encryption,cryptography,c#-2.0,rijndaelmanaged,.net,Encryption,Cryptography,C# 2.0,Rijndaelmanaged,我正在使用AES 256加密/解密一些纯文本。但该算法只使用PKCS7进行填充,但我需要使用PKCS5使其与其他平台兼容。我怎样才能做到这一点 我的源代码是: public string Encrypt(byte[] PlainTextBytes, byte[] KeyBytes, string InitialVector) { byte[] InitialVectorBytes = Encoding.UTF8.GetBytes(InitialVector); RijndaelM

我正在使用AES 256加密/解密一些纯文本。但该算法只使用PKCS7进行填充,但我需要使用PKCS5使其与其他平台兼容。我怎样才能做到这一点

我的源代码是:

public string Encrypt(byte[] PlainTextBytes, byte[] KeyBytes, string InitialVector)
{
    byte[] InitialVectorBytes = Encoding.UTF8.GetBytes(InitialVector);
    RijndaelManaged SymmetricKey = new RijndaelManaged();
    SymmetricKey.Mode = CipherMode.CBC;
    SymmetricKey.Padding = PaddingMode.PKCS7;
    ICryptoTransform Encryptor = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes);
    MemoryStream MemStream = new MemoryStream();
    CryptoStream CryptoStream = new CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write);
    CryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length);
    CryptoStream.FlushFinalBlock();
    byte[] CipherTextBytes = MemStream.ToArray();
    MemStream.Close();
    CryptoStream.Close();
    return ByteToHexConversion(CipherTextBytes);
}

PKCS#5-padding和PKCS#7-padding是同一算法的不同名称。有时也称为PKCS填充或RFC3852填充。

PKCS#5和PKCS#7使用相同的填充,因此您无需对任何内容进行大量更改。但是你能帮我找出问题的根源吗?这是一个大型企业实现的一部分,它使用AES 256对数据进行加密。Unix(Oracle)和Windows中加密的十六进制输出给出了不同的结果,尽管我们使用的是相同的密钥和iv。请给我们一个示例密钥、iv和inputdata以及两个系统的输出。这可能有助于解决您的问题。您可能还希望包含在Unix系统上使用的代码。Unix(Oracle):Key(hex)=“3D39DDFC9FEAD0C3233F744AFCC78157A06695C55FA2C206D96743849DC14D8输入(普通)=“012345678901234”IV=“0123456789123456”输出(hex)=“00984BBED076541E051A239C02D97117”窗口:Key(hex)=”3D39DDFC9FEAD0C3233F744AFCC78157A06695C55FA2C206D96743849DC14D8输入(普通)=“012345678901234”IV=“0123456789123456”输出(十六进制)=“127187969E6F08996662D62854121AF5”您的Unix(Oracle)值使用ECB模式加密(基本上忽略IV)。您的Windows值正确。我可以忽略IV(ECB模式)在.NET中进行加密吗。我想,我得和Unix的人一起去。