【问题标题】:What will be the C# equivalent of this php code?这个 php 代码的 C# 等价物是什么?
【发布时间】:2017-03-31 12:11:24
【问题描述】:

下面是解密$data内容的PHP代码:

$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();

我收到异常“要解密的数据长度无效”。 谁能建议我哪里出错了?

【问题讨论】:

  • 你忘了定义aes.IV
  • @hassan 我应该在 aes.IV 中输入什么值?
  • 有几个问题。 1.MCRYPT_RIJNDAEL_256不是AES,256设置块大小,AWS的块大小为128位。最好使用 AES。 2.MCRYPT_MODE_ECBm ECB 模式不安全,请参阅ECB mode,向下滚动到企鹅。 3. ECB 模式不使用 IV。 4.mcrypt不支持PKCS#7标准填充,只支持非标准空填充。 5. 密钥为 30 字节,不是支持的密钥大小,仅使用支持的全长密钥大小。

标签: c# php encryption rijndael rijndaelmanaged


【解决方案1】:

不是一个完整的解决方案,但你应该摆脱 decodedString。 data 保存 base64 编码的加密二进制数据。 arrb 保存 160 字节的加密二进制数据。 arrb 是您需要传递给解密的内容,不要进行从二进制到字符串然后从字符串到二进制的转换,这会丢失信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多