Obtendo classe SlowAES e RijndaelManaged no .NET para jogar juntos
Estou tentando configurar a criptografia / descriptografia AES usando a biblioteca javascriptSlowAES e aRijndaelManaged classe no .net.
Eu escolhi este método depois de leresta postagem, onde Cheeso conseguiu obter esses dois métodos de criptografia para jogar juntos
"Nos meus testes do COM-wrapped-SlowAEs, eu usei o modo CBC, e a criptografia era totalmente compatível com a classe RijndaelManaged no .NET" - Cheeso
Eu peguei o código javascript do Windows Scripting Component do Cheeso, as bibliotecas slowaes mais recentes e usando o seguinte script de javascript para testar:
var key = "12345678901234567890123456789012";
var message = "watson?";
var decrypted;
slowAES.aes.keySize.SIZE_256;
slowAES.modeOfOperation.CBC;
put_PassPhrase(key);
var result = EncryptString(message);
decrypted = DecryptCommaDelimitedStringToString(result)
document.write("Key:" + key + "<br />original:" + message + "<br />Cypher:" + result + "<br />Decrypted:" + decrypted + "<br />IV(): " + get_IV());
Estou recebendo a seguinte saída:
Key:12345678901234567890123456789012
original:watson?
Cypher:245,159,1,1,168,1,1,143,1,1,146,1,1,239,117,1
Decrypted:watson?
IV(): 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Eu modifiquei o seguinte exemplo encontradono MSDN para tentar corresponder a criptografia em c #:
public static void Main()
{
try
{
string original = "watson?";
byte[] IV = new byte[16]; // match slowaes IV
byte[] key = new System.Text.ASCIIEncoding().GetBytes("12345678901234567890123456789012");// match slowaes KEY
RijndaelManaged myRijndael = new RijndaelManaged();
myRijndael.BlockSize = 128;
myRijndael.KeySize = 256;
myRijndael.Mode = CipherMode.CBC;
// Encrypt the string to an array of bytes.
byte[] encrypted = encryptStringToBytes_AES(original, key, IV);
// Decrypt the bytes to a string.
string roundtrip = decryptStringFromBytes_AES(encrypted, key, IV);
//Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round Trip: {0}", roundtrip);
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
}
Observe a matriz de bytes:
- encrypted {byte[16]} byte[]
[0] 139 byte
[1] 104 byte
[2] 166 byte
[3] 35 byte
[4] 8 byte
[5] 42 byte
[6] 216 byte
[7] 160 byte
[8] 235 byte
[9] 153 byte
[10] 23 byte
[11] 143 byte
[12] 105 byte
[13] 3 byte
[14] 24 byte
[15] 255 byte
Eu tentei todas as opções de preenchimento com a classe gerenciada. NET, no entanto, não consigo obter as saídas criptografadas para corresponder. Alguém pode me ajudar?
Obrigado,
Prumo