[英]How to do AES128 decryption in C#?
我有一個 function 試圖解密 C# 中的字節數組。
解密function:
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;
}
下面是我如何實現 function:
byte[] app_key = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
byte[] data = { 0xB6 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x73 ,0x69 ,0x2D ,0x01 ,0x00 ,0x01 ,0x18 ,0x4F ,0x84 ,0xE8 };
var sts = Decrypt(data, app_key, new byte[16]);
Console.WriteLine(BitConverter.ToString(Encoding.ASCII.GetBytes(sts)));
但是 output 是 3F-3F-2F-31-3F-3F-3F-5E-61-2A-21-42-3F-2B 這是錯誤的!!!
正確的 output 是 d4-f7-2f-31-a3-a8-d4-a3-5e-61-2a-21-42-88-2b-dc。
我在這里做錯了什么? 還有其他AES128解密function嗎?
謝謝...
試試這個代碼; 這是我的代碼的一部分
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, 0, 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.