
我们俩的联系方式![]()
Similar entries最新评论
友情链接导航 |
翻墙代理的加密部分
由 qyb 于 星期三, 2010-03-31 22:46 发表
就是怎么在 PHP/mcrypt 和 PyCrypto 之间 DES(或其他加密算法,比如3DES/RSA/..) 通信的问题,我这里还额外考察了下 .NET 平台的算法 网上询问相关问题的还挺多,尤其是 PHP 和 .NET 之间的 DES 转换。主要是 PHP/mcrypt 隐藏了 padding 的细节,且只保留了 ZERO_PADDING 模式,所以不明白cyrpto原理的不太容易找到症结所在。我的传输方案统一用 pkcs#7 padding. 首先是给服务器端增加的 PKCS#7 PADDING 函数,来自PHP官方函数手册上某人的注释 function padding_pkcs7($crypto, $mode, $dat)
{ $block = mcrypt_get_block_size($crypto, $mode); $len = strlen($dat); $padding = $block - ($len % $block); $dat .= str_repeat(chr($padding),$padding); return $dat; } function strip_pkcs7($crypto, $mode, $text) 本地端 .NET 平台的 descrypto 封装 # -*- coding: utf-8 -*-
# ipcrypto.py from System import Array, Byte from System.Security.Cryptography import DESCryptoServiceProvider, CryptoStream, CryptoStreamMode, PaddingMode from System.IO import MemoryStream, StreamWriter, StreamReader from hashlib import md5 def s2ab(s): def ab2s(ab, len=0): class descrypto(): def enc(self, input): def dec(self, input): 本地端 PyCrypto 的封装 # -*- coding: utf-8 -*-
# pycrypto.py from hashlib import md5 from Crypto.Cipher import DES class descrypto(): def enc(self, input): return des.encrypt(input) def dec(self, input): |
如果php空间设置了mbstring.func_overl
如果php空间设置了mbstring.func_overload,strlen返回的就不一定是字节数。这种情况下应该用
mb_strlen($string, '8bit');http://us.php.net/manual/en/function.mb-strlen.php#77040