编码每次都会产生不同的哈希值

时间:2014-05-21 23:41:36

标签: c# rijndael rijndaelmanaged

我有以下用于Encrypt功能的结构。我可能遗漏了代码中的结构,因为我是一个PHP人而不是C#。

发生的事情是,每次在我的日志中哈希都会发生变化,它不应该只是等于输入的一个特定哈希值。这与下一期有关..

当我使用我的测试密码时,也就是" MysecretPassPhrase",我有一个字节长度问题。 我不想更改此密码短语,因为它是我真正密码短语的确切长度所以我有什么代码可以解决这个问题吗?

当我使用更长的密码时,例如" MysecretPassPhrase123456"和#34;大卫"作为输入,它每次都会输出不同的哈希值:CJ + mgAeL9x + qMLId + nHvXw ==,Ladj1D + LJgZCrwPatsQsEQ ==等。

需要的结构

  • Cipher Rijndael(AES)
  • 块大小128位(16字节)
  • 模式CBC(密码块链接)
  • 密钥MD5哈希密码短语
  • IV与密钥相同
  • 数据编码Base64
  • 字符UTF-8编码

错误

CryptographicException: Key size not supported by algorithm System.Security.Cryptography.SymmetricAlgorithm.set_Key (System.Byte[] value) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System.Security.Cryptography/SymmetricAlgorithm.cs:176) APIConnector.Encrypt (System.String toEncrypt) (at Assets/APIConnector.cs:59)

代码

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Xml;
using System.IO;

void submit() {
  Debug.Log ("first name is: " + firstName + " encrypted is: " + Encrypt(firstName));
}


public static string Encrypt (string toEncrypt) {
  byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("MysecretPassPhrase");
  // 256-AES key
  int numBytes = System.Text.Encoding.UTF8.GetBytes(toEncrypt).Length;
  Debug.Log ("Bytes: " + numBytes);
  byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes (toEncrypt);
  RijndaelManaged rDel = new RijndaelManaged ();
  rDel.Key = keyArray;
  rDel.BlockSize = 128;
  rDel.Mode = CipherMode.CBC;
  // http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
  rDel.Padding = PaddingMode.PKCS7;
  // better lang support
  ICryptoTransform cTransform = rDel.CreateEncryptor ();
  byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
  return Convert.ToBase64String (resultArray, 0, resultArray.Length);
}

1 个答案:

答案 0 :(得分:0)

上面给出的错误是“算法不支持密钥大小”。你的密钥数组是18字节(UTF8),它是144位,而不是你的BlockSize指示的128位。

您必须将密钥更改为有效大小。 See this article for more information.