[英]AES (Rijndael) Encryption 128 bits key ecb
我正在嘗試為代表16個字節數據的32個字節的十六進制字符串創建解密功能,這是我到目前為止嘗試過的(我在這里找到了一個有效的JS示例: http : //www.hanewin.net/encrypt/aes/aes- test.htm ):
public static string DecryptString(string code)
{
string text = hex2s("0102030405060708090a0b0c0d0e0f11");
string key = hex2s("ed7c0c82daf513b81c32f6655e8fd4ee");
//Expected result: 260fe45846fb26dbb1d28d8166d4a89f
return BitConverter.ToString(Encoding.Default.GetBytes(decrypt(text, key)));
}
private static string hex2s(string hex)
{
var r = "";
if (hex.IndexOf("0x") == 0 || hex.IndexOf("0X") == 0) hex = hex.Substring(2);
if (hex.Length % 2 > 0) hex += '0';
for (var i = 0; i < hex.Length; i += 2)
{
int thisCharCode = hex[i];
char newCharCode = (char)(thisCharCode);
r = r + newCharCode;
}
return r;
}
public static String decrypt(String imput, String key)
{
byte[] data = Convert.FromBase64String(imput);
String decrypted;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = Encoding.ASCII.GetBytes(key);
rijAlg.Mode = CipherMode.ECB;
rijAlg.BlockSize = 128;
rijAlg.Padding = PaddingMode.Zeros;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, null);
using (MemoryStream msDecrypt = new MemoryStream(data))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
decrypted = srDecrypt.ReadToEnd();
}
}
}
}
return decrypted;
}
我收到一個錯誤:“要解密的數據長度無效。”
我將不勝感激任何建議。
查看您的評論后,我找到了解決方案:
public static string DecryptString(string code)
{
byte[] text = FromHex("0102030405060708090a0b0c0d0e0f11");
byte[] key = FromHex("ed7c0c82daf513b81c32f6655e8fd4ee");
//Expected result: 260fe45846fb26dbb1d28d8166d4a89f
return BitConverter.ToString(Encoding.Default.GetBytes(decrypt(text, key)));
}
public static byte[] FromHex(string hex)
{
byte[] raw = new byte[hex.Length / 2];
for (int i = 0; i < raw.Length; i++)
{
raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
}
return raw;
}
public static String decrypt(byte[] input, byte[] key)
{
byte[] data = input;
String decrypted;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = key;
rijAlg.Mode = CipherMode.ECB;
rijAlg.BlockSize = 128;
rijAlg.Padding = PaddingMode.Zeros;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, null);
using (MemoryStream msDecrypt = new MemoryStream(data))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
decrypted = srDecrypt.ReadToEnd();
}
}
}
}
return decrypted;
}
感謝您的幫助@Damien_The_Unbeliever和@Ian
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.