如何解决如何在C#中进行AES128解密?
我有一个函数尝试在C#中解字节数组。
解密功能:
string Decrypt(byte[] cipherText,byte[] Key,byte[] IV)
{
string plaintext = null;
// Create AesManaged
using (AesManaged aes = new AesManaged())
{
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.None;
// Create a decryptor
ICryptoTransform decryptor = aes.CreateDecryptor(Key,IV);
// Create the streams used for decryption.
using (MemoryStream ms = new MemoryStream(cipherText))
{
// Create crypto stream
using (CryptoStream cs = new CryptoStream(ms,decryptor,CryptoStreamMode.Read))
{
// Read crypto stream
using (StreamReader reader = new StreamReader(cs))
plaintext = reader.ReadToEnd();
}
}
}
return plaintext;
}
下面是我如何实现该功能:
byte[] app_key = { 0x01,0x01,0x01 };
byte[] data = { 0xB6,0x00,0x73,0x69,0x2D,0x18,0x4F,0x84,0xE8 };
var sts = Decrypt(data,app_key,new byte[16]);
Console.WriteLine(BitConverter.ToString(Encoding.ASCII.GetBytes(sts)));
但是输出是3F-3F-2F-31-3F-3F-3F-5E-61-2A-21-42-3F-2B这是错误的!
正确的输出是d4-f7-2f-31-a3-a8-d4-a3-5e-61-2a-21-42-88-2b-dc。
我在这里做错了什么?还有其他AES128解密功能吗?
谢谢...
解决方法
尝试此代码;这是我的代码的一部分
AES解密
public string AESDecrypt(string cryptText){
// Seed and construct the transformation used for decrypting
AESCryptoAlgorithm.GenerateIV();
AESCryptoAlgorithm.GenerateIV();
byte[] iv = AESCryptoAlgorithm.IV;
int ivSize = iv.Length;
ICryptoTransform decryptor = AESCryptoAlgorithm.CreateDecryptor(AESKey,iv);
// The crypt text is expected to be encoded in base64 format,decode it...
byte[] cryptBytes = Convert.FromBase64String(cryptText);
byte[] cryptBytes = Convert.FromBase64String(cryptText);
byte[] clearBytes = decryptor.TransformFinalBlock(cryptBytes,cryptBytes.Length);
return Encoding.ASCII.GetString(clearBytes,ivSize,clearBytes.Length - ivSize).TrimEnd('\0');
}
AES算法
protected Rijndael AESCryptoAlgorithm {
get
{
if(_AESCryptoAlogrithm == null){
_AESCryptoAlogrithm = Rijndael.Create();
_AESCryptoAlogrithm.BlockSize = 128;
_AESCryptoAlogrithm.Mode = CipherMode.CBC;
_AESCryptoAlogrithm.Padding = PaddingMode.Zeros;
}
return _AESCryptoAlogrithm;
}
}
十六进制解码
public static byte[] HexDecode(string hex){
int len = hex.Length;
byte[] bytes = new byte[len / 2];
for (int i = 0; i < len; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i,2),16);
return bytes;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。