我有以下生成密钥的c#代码:
public static byte[] Encrypt(byte[] plainData,string salt) { DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); DES.Key = ASCIIEncoding.ASCII.GetBytes(salt); DES.IV = ASCIIEncoding.ASCII.GetBytes(salt); ICryptoTransform desencrypt = DES.CreateEncryptor(); byte[] encryptedData = desencrypt.TransformFinalBlock(plainData,plainData.Length); return encryptedData; } private string GetEncryptedKey(string key) { return BitConverter.ToString(KeyGeneratorForm.Encrypt(ASCIIEncoding.ASCII.GetBytes(key),"abcdefgh")).Replace("-",""); }
我试图在PHP中执行相同的操作:
function get_encrypted_key($key){ $salt = "abcdefgh"; return bin2hex(mcrypt_encrypt(MCRYPT_DES,$salt,$key,MCRYPT_MODE_CBC,$salt)); }
但是,结果中存在小的差异,因为最后16个字符总是不同的:
With key "Benjamin Franklin": C# : 0B3C6E5DF5D747FB3C50DE952FECE3999768F35B890BC391 PHP: 0B3C6E5DF5D747FB3C50DE952FECE3993A881F9AF348C64D With key "President Franklin D Roosevelt": C# : C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB32A86FABCEA5711E1 PHP: C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB37ACBE60BB1D21F3F
我还尝试使用以下代码对我的密钥执行填充转换:
function get_encrypted_key($key){ $salt = "abcdefgh"; $extra = 8 - (strlen($key) % 8); if($extra > 0) { for($i = 0; $i < $extra; $i++) { $key.= "\0"; } } return bin2hex(mcrypt_encrypt(MCRYPT_DES,$salt)); }
但我最终得到的结果与没有填充相同.
如果你有任何关于发生了什么的线索,我会很高兴听到它!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。