我有一个test.PHP,内容如下:
echo encrypt("something"); function encrypt($str) { $enc_key = "my key is 8 char long"; $ivArray=array( 0x10,0x12,5,0x11,0x23,1,0x55,0x43 ); $iv=null; foreach ($ivArray as $element) $iv.=CHR($element); return strtoupper(bin2hex(base64_encode(mcrypt_encrypt(MCRYPT_DES,$enc_key,$str,MCRYPT_MODE_CBC,$iv)))); }
private static byte[] iv = new byte[] { 0x10,0x43 }; public string ConvertString(string input,string myKey) { try { input = byteArrayString(input); byte[] bytes = Encoding.UTF8.GetBytes(myKey); byte[] buffer = Convert.FromBase64String(input); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream,provider.CreateDecryptor(bytes,iv),CryptoStreamMode.Write); stream2.Write(buffer,buffer.Length); stream2.FlushFinalBlock(); return Encoding.UTF8.GetString(stream.ToArray()); } catch { return string.Empty; } } private string byteArrayString(string input) { byte[] buffer = new byte[input.Length / 2]; for (int i = 0; i < input.Length; i += 2) { if (i < input.Length) { buffer[i / 2] = (byte)((Uri.FromHex(input[i]) * 0x10) + Uri.FromHex(input[i + 1])); } } return Encoding.UTF8.GetString(buffer); }
如果我在C#上完成所有工作,那么从PHP到C#的差异就是来自PHP的最终加密的12个字节.
我在PHP端做错了什么来匹配加密?
更新(PKCS7):
$block = mcrypt_get_block_size('des','cbc'); $len = strlen($str); $padding = $block - ($len % $block); $str .= str_repeat(chr($padding),$padding);
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。