I have a function which try to decyrpt a byte array in C#.
Decryption 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;
}
Below is how I implement the 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)));
But the output is 3F-3F-2F-31-3F-3F-3F-5E-61-2A-21-42-3F-2B which is wrong!!!
The correct output is d4-f7-2f-31-a3-a8-d4-a3-5e-61-2a-21-42-88-2b-dc.
What am I doing wrong here? Is there any other AES128 decryption function?
Thanks...
Try this code; This is a part of my code
AES Decryption
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');
}
AESAlgorithm
protected Rijndael AESCryptoAlgorithm {
get
{
if(_AESCryptoAlogrithm == null){
_AESCryptoAlogrithm = Rijndael.Create();
_AESCryptoAlogrithm.BlockSize = 128;
_AESCryptoAlogrithm.Mode = CipherMode.CBC;
_AESCryptoAlogrithm.Padding = PaddingMode.Zeros;
}
return _AESCryptoAlogrithm;
}
}
HEX Decode
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;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.