-
爬虫中url中文常用的编码和加密方式
2020-11-30 19:59:46网站一般会采用编码或者加密的方式对中文字符进行处理。但是对于编码或者加密的方式不同网站有不同的方法。 通常采用的方式有一下几种: 一、Unicode编码 Unicode编码通常由两个字节组成,称作USC-2,个别偏僻字由四...在爬虫的时候经常会遇到URL中包含中文字符,可以直接指示到.jpg .gif .mp3/4…等文件的地址。但是因为是中文,URL中无法直接显示。网站一般会采用编码或者加密的方式对中文字符进行处理。但是对于编码或者加密的方式不同网站有不同的方法。
通常采用的方式有一下几种:一、Unicode编码
Unicode编码通常由两个字节组成,称作USC-2,个别偏僻字由四个字节组成,称作USC-4。前127个还表示原来ASCII码里的字符,只不过由一个字节变成了两个字节。
unicode编码基本格式为U开头,以斜杠分开。如图所示:
优点:可以囊括多国语言,囊括了常用汉字不足:表示一个英文字符由一个字节变成了两个,浪费存储空间和传输速度。生僻字表示不足
二、UTF-8编码
Unicode编码的一种,Unicode用一些基本的保留字符制定了三套编码方式,它们分别为UTF-8,UTF-16,UTF-32.在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处是UTF-8保留了ASCII字符的编码作为它的一部分。UTF-8俗称“万国码”,可以同屏显示多语种,一个汉字通常占用3字节(生僻字占6个)。为了做到国际化,网页尽可能采用UTF-8编码
以&#x开头,分号分隔。如图所示:
三、GB2312
GB2312简体中文编码,一个汉字占用2个字节,在大陆是主要的编码方式。当文章/网页中包含繁体中文、日文、韩文等时,这些内容可能无法被正确编码。
作用:国家简体中文字符集,兼容ASCII
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。
范围:高字节从A1-A7,低字节从A1到FE。将高字节和低字节分别加上0xA0即可得到编码。
编码格式如下图,基本是四个字符代表一个汉字字符。
四、BIG5编码
称为繁体中文编码,主要在台湾地区使用。
五、GBK编码
作用:它是GB2312的扩展,转换后的格式和GBK2312一样,加入对繁体字的支持,兼容GB2312.
位数:使用2个字节表示,可表示21886个字符。
范围:高字节从81到FE,低字节从40到FE.
六、GB18030编码
作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。
位数:它采用变字节表示(1ASCII, 2,4字节)。可表示27484个文字。
范围:1字节从00到7F;2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39.
加密方式:
对于有些url中的代表中文的部分并不是如上的格式编码的情况,可能是进行过加密。验证是否是标准加密方式加密的土方法,就是将汉字部分,直接进行搜索。如果能跳出多个不同的网站,可证明是某种标准的加密方式。
如图所示,我搜索的这段字符串实际代表的就是“云”这个汉字。在直接将加密后的字符串进行搜索后,跳出很多不同的网页。表明不止那个网站用这种加密,即这是一个标准统一的加密方式。
详细数一下位数,整个编码是32个数字。查询一下32位加密的方式,可能是MD5。通过代码逆向加密进行验证。
验证正确。python3中,MD5加密归纳到了Hashlib库中了。
代码:import hashlib data = "云" hashlib.md5(data.encode(encoding = 'utf-8')).hexdigest()
其他加密方式还有base64,RSA加密等。这些在爬虫工作中暂时还没有遇到。不展开记述。
-
md5加密后怎么解密_PHP中常用的加密解密方法总结
2020-12-04 21:07:36php中文网最新课程每日17点准时技术干货分享php加密解密:php加密和解密函数通常可以用来加密一些有用的字符串存放在数据库里或作为各个子系统间同步登陆的令牌,并且通过解密算法解密字符串,该函数使用了base64和MD...php中文网最新课程
每日17点准时技术干货分享
php加密解密:php加密和解密函数通常可以用来加密一些有用的字符串存放在数据库里或作为各个子系统间同步登陆的令牌,并且通过解密算法解密字符串,该函数使用了base64和MD5加密和解密。
①第一种加密解密算法
<?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } } //加密:"z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=" echo encryptDecrypt('password', 'Helloweba欢迎您',0); //解密:"Helloweba欢迎您" echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1); ?>
②第二种加密解密算法:
<?php //加密函数 function lock_url($txt,$key='www.zhuoyuexiazai.com'){ $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = base64_encode($txt); $tmp = ''; $i=0;$j=0;$k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } return urlencode($ch.$tmp); } //解密函数 function unlock_url($txt,$key='www.zhuoyuexiazai.com'){ $txt = urldecode($txt); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $ch = $txt[0]; $nh = strpos($chars,$ch); $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = substr($txt,1); $tmp = ''; $i=0;$j=0; $k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } return base64_decode($tmp); } ?>
③第三种加密解密算法:
<?php //改进后的算法 //加密函数 function lock_url($txt,$key='zhuoyuexiazai'){ $txt = $txt.$key; $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = base64_encode($txt); $tmp = ''; $i=0;$j=0;$k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } return urlencode(base64_encode($ch.$tmp)); } //解密函数 function unlock_url($txt,$key='zhuoyuexiazai'){ $txt = base64_decode(urldecode($txt)); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $ch = $txt[0]; $nh = strpos($chars,$ch); $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = substr($txt,1); $tmp = ''; $i=0;$j=0; $k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } return trim(base64_decode($tmp),$key); } ?>
④第四种加密解密算法:
<?php function passport_encrypt($txt, $key = 'www.zhuoyuexiazai.com') { srand((double)microtime() * 1000000); $encrypt_key = md5(rand(0, 32000)); $ctr = 0; $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); } return urlencode(base64_encode(passport_key($tmp, $key))); } function passport_decrypt($txt, $key = 'www.zhuoyuexiazai.com') { $txt = passport_key(base64_decode(urldecode($txt)), $key); $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $md5 = $txt[$i]; $tmp .= $txt[++$i] ^ $md5; } return $tmp; } function passport_key($txt, $encrypt_key) { $encrypt_key = md5($encrypt_key); $ctr = 0; $tmp = ''; for($i = 0; $i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } return $tmp; } $txt = "1"; $key = "testkey"; $encrypt = passport_encrypt($txt,$key); $decrypt = passport_decrypt($encrypt,$key); echo $encrypt."
"; echo $decrypt."
"; ?>⑤第五种加密解密算法:discuz中使用的加密解密算法
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。
最常见的应用在用户登录以及一些API数据交换的场景。
最常见的应用在用户登录以及一些API数据交换的场景。
加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。
<?php //非常给力的authcode加密函数,Discuz!经典代码(带详解) //函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。 function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } // 核心加解密部分 for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { // 验证数据有效性,请看未加密明文的格式 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } } $str = 'abcdef'; $key = 'www.helloweba.com'; echo authcode($str,'ENCODE',$key,0); //加密 $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; echo authcode($str,'DECODE',$key,0); //解密 ?>
⑥第六种加密解密算法:
<?php //函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。 function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($key[$i%$key_length]); $box[$i]=$i; } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='D'){ if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ return substr($result,8); }else{ return''; } }else{ return str_replace('=','',base64_encode($result)); } } $str = 'abc'; $key = 'www.helloweba.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key); ?>
-END-
▼
-
几种常用的加密方式简单介绍
2017-07-13 15:46:311 Base64加密方式(可逆) ...Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护 是计算机广泛使用的杂凑算法之一(又译摘1 Base64加密方式(可逆)
Base64中的可打印字符包括字母A-Z/a-z/数组0-9/ 加号’+’斜杠’/’ 这样共有62个字符
Base64 ios7之后加入系统库
android 中 的几种模式 ,在需要与服务端或者交互式要沟通好需要处理的字符。
• CRLF 这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF
• DEFAULT 这个参数是默认,使用默认的方法来加密
• NO_PADDING 这个参数是略去加密字符串最后的”=”
• NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了)
• URL_SAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/因为各个系统间会有特殊字符处理不同的情况。有个简单的方式直接用 NO_WRAP 模式加密后,进行utf-8处理。如下:
public static String getBase64(String str) { String result = ""; if( str != null) { try { result = new String(Base64.encode(str.getBytes("utf-8"), Base64.NO_WRAP),"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return result; } // 解密 public static String getFromBase64(String str) { String result = ""; if (str != null) { try { result = new String(Base64.decode(str, Base64.NO_WRAP), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return result; }
2 MD5加密
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护
是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
根据输出值,不能得到原始的明文,即其过程不可逆
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5加盐
3 钥匙串加密方式
iCloud钥匙串,苹果给我们提供的密码保存的解决方案,iOS7之后有的
存沙盒:
1、如果手机越狱,密码容易被窃取。
2、当软件更新时,沙盒里的内容是不被删除的。但是,如果将软件卸载后重装,沙盒里的数据就没有了。
3、每个APP的沙盒是相对独立的,密码无法共用。
存钥匙串里:
1、苹果提供的安全方案,rsa加密,相对安全。
2、无论软件更新或删除,密码都存在,都可以自动登录。
3、同一公司的APP密码是可以共用的。
4 对称加密算法
优点:算法公开、计算量小、加密速度快、加密效率高、可逆
缺点:双方使用相同钥匙,安全性得不到保证
现状:对称加密的速度比公钥加密快很多,在很多场合都需要对称加密,
算法: 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。不同算法的实现机制不同,可参考对应算法的详细资料
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准
nECB :电子代码本,就是说每个块都是独立加密的
nCBC :密码块链,使用一个密钥和一个初始化向量 (IV)对数据执行加密转换
ECB和CBC区别:CBC更加复杂更加安全,里面加入了8位的向量(8个0的话结果等于ECB)。在明文里面改一个字母,ECB密文对应的那一行会改变,CBC密文从那一行往后都会改变。
5 RSA加密(非对称加密算法)(Secruty.framework系统库)
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密
特点:
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了
但是RSA加密算法效率较差,对大型数据加密时间很长,一般用于小数据。
-
md5可以解密么_PHP中常用的加密解密方法总结
2021-01-22 00:08:20php中文网最新课程每日17点准时技术干货分享php加密解密:php加密和解密函数通常可以用来加密一些有用的字符串存放在数据库里或作为各个子系统间同步登陆的令牌,并且通过解密算法解密字符串,该函数使用了base64和MD...php中文网最新课程
每日17点准时技术干货分享
php加密解密:php加密和解密函数通常可以用来加密一些有用的字符串存放在数据库里或作为各个子系统间同步登陆的令牌,并且通过解密算法解密字符串,该函数使用了base64和MD5加密和解密。
①第一种加密解密算法
<?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } } //加密:"z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=" echo encryptDecrypt('password', 'Helloweba欢迎您',0); //解密:"Helloweba欢迎您" echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1); ?>
②第二种加密解密算法:
<?php //加密函数 function lock_url($txt,$key='www.zhuoyuexiazai.com'){ $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = base64_encode($txt); $tmp = ''; $i=0;$j=0;$k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } return urlencode($ch.$tmp); } //解密函数 function unlock_url($txt,$key='www.zhuoyuexiazai.com'){ $txt = urldecode($txt); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $ch = $txt[0]; $nh = strpos($chars,$ch); $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = substr($txt,1); $tmp = ''; $i=0;$j=0; $k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } return base64_decode($tmp); } ?>
③第三种加密解密算法:
<?php //改进后的算法 //加密函数 function lock_url($txt,$key='zhuoyuexiazai'){ $txt = $txt.$key; $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = base64_encode($txt); $tmp = ''; $i=0;$j=0;$k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } return urlencode(base64_encode($ch.$tmp)); } //解密函数 function unlock_url($txt,$key='zhuoyuexiazai'){ $txt = base64_decode(urldecode($txt)); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $ch = $txt[0]; $nh = strpos($chars,$ch); $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = substr($txt,1); $tmp = ''; $i=0;$j=0; $k = 0; for ($i=0; $i $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } return trim(base64_decode($tmp),$key); } ?>
④第四种加密解密算法:
<?php function passport_encrypt($txt, $key = 'www.zhuoyuexiazai.com') { srand((double)microtime() * 1000000); $encrypt_key = md5(rand(0, 32000)); $ctr = 0; $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); } return urlencode(base64_encode(passport_key($tmp, $key))); } function passport_decrypt($txt, $key = 'www.zhuoyuexiazai.com') { $txt = passport_key(base64_decode(urldecode($txt)), $key); $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $md5 = $txt[$i]; $tmp .= $txt[++$i] ^ $md5; } return $tmp; } function passport_key($txt, $encrypt_key) { $encrypt_key = md5($encrypt_key); $ctr = 0; $tmp = ''; for($i = 0; $i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } return $tmp; } $txt = "1"; $key = "testkey"; $encrypt = passport_encrypt($txt,$key); $decrypt = passport_decrypt($encrypt,$key); echo $encrypt."
"; echo $decrypt."
"; ?>⑤第五种加密解密算法:discuz中使用的加密解密算法
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。
最常见的应用在用户登录以及一些API数据交换的场景。
最常见的应用在用户登录以及一些API数据交换的场景。
加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。
<?php //非常给力的authcode加密函数,Discuz!经典代码(带详解) //函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。 function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } // 核心加解密部分 for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { // 验证数据有效性,请看未加密明文的格式 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } } $str = 'abcdef'; $key = 'www.helloweba.com'; echo authcode($str,'ENCODE',$key,0); //加密 $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; echo authcode($str,'DECODE',$key,0); //解密 ?>
⑥第六种加密解密算法:
<?php //函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。 function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($key[$i%$key_length]); $box[$i]=$i; } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='D'){ if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ return substr($result,8); }else{ return''; } }else{ return str_replace('=','',base64_encode($result)); } } $str = 'abc'; $key = 'www.helloweba.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key); ?>
-END-
▼
-
c++ 中文 base64加密_彩虹工具箱 mac(常用小工具百宝箱) v1.3.32中文免费版
2020-11-03 18:46:57彩虹工具箱 mac是一款非常实用的生活常用小工具,彩虹工具箱该款软件的功能上就包含了微博反查图片上传者、md5加密、日期差计算器、摩斯密码转换器、二维码生成工具等等在内的多种工具。彩虹工具箱 for mac软件介绍.... -
一些常用的加密算法简介 - DES, AES, DSA
2015-05-20 17:26:08DES全称是Data Encryption Standard, 翻译成中文时数据加密标准。DES算法将64位多明文变位64位点密文。 AES全称Advanced Encryption Standard,翻译成中文是高级加密标准,是美国联邦政府采用的一种区块加密标准... -
记录MD5中文加密的坑
2020-06-04 15:26:51md5加密非常常用,我是一个项目中用到了spring自带的MD5加密工具类,DigestUtils。 DigestUtils.md5DigestAsHex(user.getName().getBytes()); 没错就是这么调用在用户认证这块,一开始死活认证错误,总是说密码... -
js 常用加密方法与技巧
2020-10-17 12:20:52// 内置函数btoa 加密 var value = 'hello' console.log(btoa(value)) 输出base64 编码:aGVsbG8= // 内置函数atob 解码 var value = 'aGVsbG8=' console.log(atob(value)) 输出base64 解码:hello 中文编码 var ... -
常用加密算法简单整理以及spring securiy使用bcrypt加密
2016-04-14 15:27:00Message Digest Algorithm MD5(中文名为消息摘要算法第五版) https://baike.baidu.com/item/MD5/212708?fr=aladdin MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的-128bit=32位16... -
java变短加密解密算法_java----加密/解密常用算法
2021-03-05 13:47:41一、常用的加密/解密算法1.Base64严格来说,Base64不是一种加密/解密算法,而是一种编码方式,多用于解决中文乱码中。常用场景:对文件、URL等进行Base64编码,以字符串方式发送给对方;对方在进行解码。2.AESAES是... -
获取用户的中文姓名,手机号,邮箱,地址,年龄等随机信息,MD5加密等常用的工具。
2021-01-05 16:04:32生成常用的用户信息 【中文名:getChineseName()】 【随机地址:getRoad()】 【随机年龄:getAge(start,end)】 MD5加密:【MD5(pwd)】 32位uuid:【getId()】 32或36位uuid:【getId(32/36)】 随机手机号:... -
JAVA加密解密之常用签名算法
2016-01-16 14:00:00Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and ... -
java 加密 aec_AEC 加密解密 - 有妳很满促的个人空间 - OSCHINA - 中文开源技术交流社区...
2021-02-28 18:23:43加密解密是程序中常用的,大多数我们都采用md5加密,今天给大家介绍AEC加密。一般采用相同的语言使用AEC加密解密很简单(例如:java加密,java去解密),这里我就不多说了。给大家介绍下JavaScript加密,Java解密(费了... -
第十二篇:JAVA加密解密之常用签名算法
2017-08-30 10:43:13Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and ... -
ASP版hmac和md5加密函数,支持中文,带unicode和utf8转码
2011-04-10 19:58:39其实我们常用的ASP版md5加密,与其它程序的也是不兼容中文。 原因还是ASP转换unicode十分困难,但是支付宝的接口是有这么个函数的,而且代码很简练,我参考它设计了UTF-8编码函数。(支持多国语言的哦) 经过三天的... -
【实验】设计一个加密算法(英文、中文)
2019-06-12 20:31:16现有的ASCII编码方式可以表示全部的英文字符和常用的标点符号,于是选用ASCII编码,可见字符的范围是32~126。 **基于字符的分组加密:** 输入一串数字作为密钥K,循环使用该数字序列对明文进行加密。 对于每一个可见... -
对称加密和非对称加密
2010-11-25 10:28:00游戏中常用的加密算法本书不是一本专门介绍密码学的书,所以下面讲解的加密算法内容将会忽略很多细节上的东西,想要深入研究和学习密码学的读者可以参考《Cryptography for Developers》,中文版名称叫《程序员密码... -
Android中常用的编码和解码(加密和解密)的问题
2014-11-28 12:57:00编码目的是为了在⺴址上可以包含中文等特殊字符解码是为了把编码后的内容还原成原始的内容格式如下%9C%3C%F3%98 规则: %hex_byte 就是将实际的字节转换为十六进制进行显示编码URLEncoder.encode(String str, String... -
AES加密、解密工具类
2019-03-20 16:26:55AES(Advanced Encryption Standard),中文名称高级加密标准。 AES是开发中常用的加密算法之一。然而由于前后端开发使用的语言不统一,导致经常出现前端加密而后端不能解密的情况出现。然而无论什么语言系统,AES ... -
JAVA中加密算法的简单使用入门
2020-05-17 10:27:49在这里我主要总结一下常用的加密算法,后续还会不断更新,如果总结的不好,敬请原谅,有错误的地方欢迎大家指出。 一、MD5加密 1、 概述 Message Digest Algorithm MD5(中文名为消息摘要算法第 -
宏杰文件夹加密V2878【永久免费的文件加密软件】
2013-08-04 14:50:46宏杰文件夹加密 V2878 [永久免费的文件加密软件] 授权方式:免费常用软件 界面语言:简体中文 软件大小:2.75MB 所属专题:安全相关 运行环境:WinXP,Win2003,Vista,Win7 推荐星级: 发布时间:2013-08-... -
MD5加密
2017-06-14 14:31:09Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,是一种比较常用的哈希算法。 java中可以用两种方法实现,我们先说麻烦一点的,代码: 复制代码代码如下... -
MD5加密(加强版)
2016-10-24 08:30:53在开发中,如果我们用HTTP发送请求的话,或多或少会涉及到用户的账户信息,这个时候我们可以用MD5对用户的信息进行加密,下面本菜菜推荐几种常用的加密方法^_^ 就是普通的用md5加密 先在项目中导入MD5的类,github上... -
ADONET数据加密之一
2011-11-28 12:34:13一、常用数据加密 1.MD5,全称Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护,MD5通常是使用16进制数来表示的,所以一共是16种... -
.net下可逆的加密算法
2013-07-02 18:43:15.Net提供了许多可你的加密算法,总有一种适合你的...估计是外国人写的,不支持中文。另外,他的结构也不是很符合我们常用的需求。我对他进行了一些改进,使它具有中国特色。 using System; using System.Security.Cr -
js 加密解密(javascript编码解码)
2010-10-20 16:52:07在为了防止乱码的情况下,有时我们会采用使用js 加密或解密中文字符串 下面总结下js 常用到加密解密常用的东东 encodeURI()和encodeURIComponent()方法是将编码传递给浏览器的URI(统一资源标识).有效的URI... -
宏杰文件夹加密软件 v2928 官方免费版
2014-05-19 16:47:24软件语言:简体中文 软件性质:常用软件 软件授权:官方版 更新时间:2014-05-16 应用平台:/WinXP/|Win7|/Vista/Win8/ 宏杰文件夹加密软件是一款永久免费、非常优秀的、专业的文件和文件夹加密器,宏杰... -
Java加密与解密艺术
2016-09-09 19:19:40关于字节与位字节:byte(b) ...一个中文汉字(中文标点)占两个字节的空间通常将可表示常用英文字符8位二进制称为一字节 常用的可逆算法 BASE64 http://blog.csdn.net/happylee6688/article/details/43950521 2.DE