我正在尝试使用C#和PHP加密字符串,我显然希望它们返回相同的值。
C#代码:
public static string Encrypt(string toEncrypt)
{
int intLenght = toEncrypt.Length - 1;
byte[] keyArray;
byte[] ToEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(PKey));
hashmd5.Clear();
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(ToEncryptArray, 0, ToEncryptArray.Length);
tdes.Clear();
string res = System.Convert.ToBase64String(resultArray, 0, resultArray.Length);
return res;
}
PHP代码:
function decryptCode(){
$hash = base64_encode(md5($key, true));
$toDeco = checkCode();
if(!$toDeco)
{
die("Invalid Code!");
}
$deco = utf8_decode($toDeco);
$data = openssl_encrypt($deco, 'DES-ECB', $key);
die($data);
}
C#返回的内容:0vY6hKcRYLA =
PHP返回的内容:0L9AwtASbvg =
键(pKey和$ key)当然都是一样的。我检查了md5哈希值,这些都是相同的,所以这不是问题。
是的,我知道这种方法(三重des,ecb)根本不是很安全,但它仅适用于学校项目。
这里的PHP代码有什么问题?有人能帮助我吗?
谢谢!