2009-08-27 3 views
1

Im постоянно получает «плохой расшифровать», пытаясь разукрасить строку из программы C#, используя тот же iv с обеих сторон. Это становится немного раздражающим, и я не могу понять проблему.Любой способ разблокировки pkcs7 проложенных aes 256 cbc из ruby?

Это код рубин

def unencrypt(message) 
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") 
c.padding = 1 
c.decrypt 
c.key = key = Digest::SHA1.hexdigest("mytestiv1111111111111111111111111").unpack('a2'*32).map{|x| x.hex}.pack('c'*32) 
c.iv = iv = key 
e = c.update(Base64.decode64(message)) 
e << c.final 
puts e 
end 

И это то, что делает шифрование на C# стороне

public string encrypt(string text, //the text to be encrypt 
         string password,// the encryption key 
         int cipherindex//The strength of the encryption 
        ) 
{ 
    try 
    {  
     //get the cipher strength--from cipherindex 
     CipherKey Key=CipherKey.getCipherKey(cipherindex); 
     //build and init the Encryptor 
     RijndaelManaged rijndaelCipher = new RijndaelManaged(); 
     rijndaelCipher.Mode = sCipherMode; 
     rijndaelCipher.Padding = sPaddingMode; 
     rijndaelCipher.KeySize = Key.Size; 
     rijndaelCipher.BlockSize =Key.Size; 
     byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password); 
     byte[] keyBytes = new byte[Key.Len]; 
     int len= pwdBytes.Length; 
     if (len > keyBytes.Length) len= keyBytes.Length; 
     System.Array.Copy(pwdBytes,keyBytes,len); 
     rijndaelCipher.Key = keyBytes; 
     rijndaelCipher.IV = keyBytes; 
     ICryptoTransform transform = rijndaelCipher.CreateEncryptor(); 

     byte [] plainText = System.Text.Encoding.UTF8.GetBytes(text); 
     byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length); 
     return Convert.ToBase64String(cipherBytes); 
    } 
    catch (Exception e) 
    { 
     throw; 
    } 

} 

Есть идеи? Приветствия Дэвид

ответ

1

Ваши ключи выглядят совершенно разные для меня,

  1. В Ruby используется SHA1 для получения ключа.
  2. В C# пароль используется raw.

Дамп двоичных буферов ключей на обеих платформах, чтобы убедиться, что они идентичны. Затем вы просто очистите свое первое препятствие :)

 Смежные вопросы

  • Нет связанных вопросов^_^