2017-03-31 67 views
0

這裏是PHP代碼,$解密數據的內容:這個php代碼的C#等價物是什麼?

$data='DwRktl1y8st4k11pSxy2tE9kJMiNlIgV6Gu9ekY8ia2QtoGbdiaiemHeQJ+2MGTZmRKM0IGsiXQyqvXLx/t47FcXmwzZPayS3i6mmYD+qFibbcmA5lGI1uIjT7FSgLM9Xi9QBnTMjIwIEmv6tQaKGGTbhwvUuaP7hek57Xnlk+9CCarkkDlGLed5y+6GedXED0KgMcW1rqXLH7EQub+KzQ=='; 
$crypttext = base64_decode($data); 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'AbcNtByIGI1BpgcsAG8GZl8pdwwxyz', $crypttext, MCRYPT_MODE_ECB, $iv); 

我想這是.NET,但沒有奏效:

string data = "DwRktl1y8st4k11pSxy2tE9kJMiNlIgV6Gu9ekY8ia2QtoGbdiaiemHeQJ+2MGTZmRKM0IGsiXQyqvXLx/t47FcXmwzZPayS3i6mmYD+qFibbcmA5lGI1uIjT7FSgLM9Xi9QBnTMjIwIEmv6tQaKGGTbhwvUuaP7hek57Xnlk+9CCarkkDlGLed5y+6GedXED0KgMcW1rqXLH7EQub+KzQ=="; 

    byte[] arrb = Convert.FromBase64String(data); 
    string decodedString = Encoding.UTF8.GetString(arrb); 

    const string key = "AbcNtByIGI1BpgcsAG8GZl8pdwwxyz"; 

    RijndaelManaged aes = new RijndaelManaged(); 
    aes.KeySize = 256; 
    aes.BlockSize = 256; 
    aes.Padding = PaddingMode.None; 
    aes.Mode = CipherMode.ECB; 
    aes.GenerateIV(); 
    ICryptoTransform decryptor = aes.CreateDecryptor(Encoding.UTF8.GetBytes(key), aes.IV); 
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(decodedString.Trim())); 
    CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read); 

StreamReader sr = new StreamReader(cs); 
user_data = sr.ReadToEnd(); 

我得到的異常「的長度要解密的數據無效「。 任何人都可以提出我可能會出錯的地方嗎?

+0

你忘了定義'aes.IV' – hassan

+0

@hassan我應該把什麼值放在aes.IV中? – Mainak

+0

https://msdn.microsoft.com/en-us/library/2f5ff61x(v=vs.110).aspx#Anchor_3 – hassan

回答

0

不是一個完整的解決方案,但你應該擺脫decodedString。數據保存base64編碼的加密二進制數據。 arrb保存160個字節的加密二進制數據。 arrb是你需要傳遞給你的解密,不要從二進制轉換爲字符串,然後從字符串轉換爲二進制,這會丟失信息。

相關問題