文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
RSA 加密
RSA 公钥加密算法在 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出,RSA 正是他们三人的姓氏开头字母拼接。RSA 是目前公认最有影响力的加密算法,不过并不是不可破解的,在短密钥的情况下,基于现在越来越强大的云计算,也存在被爆破的可能。早在 1999 年,就有花了五个月时间在一台有 3.2G 中央内存的 Cray C916 计算机上成功分解 RSA-155(512 位)。
RSA 的最大问题在于加解密速度慢,整个运算过程相对要消耗不少时间,不过这一些问题在今后计算资源横向扩展的条件下,也不是很大的问题。
我们来测试一下 PHP 下的 RSA 加解密,如果希望简单一点,PHP 上可以使用 phpseclib,下载地址 http://phpseclib.sourceforge.net/ ,不需要配置即可直接使用,首先下载 phpseclib,文件结构如图 10-5 所示。
图 10-5
然后生成密钥,代码如下:
<?php include ( './Crypt/RSA.php' ); $rsa = new Crypt_RSA (); extract ( $rsa->createKey ()); echo "$privatekey<br />$publickey" ;
生成密钥后,我们来看看加解密代码:
<?php $PUBLIC_KEY ='-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCm418GwRwXmYOC6eb6G6NzCMRt nan7Jt76kygfmfa2mGRu1Ff8t3bjyrrRPra8LQgcGxO1KZkDPxODsfX2fblXCNCz EXxYerZIrcQXR4utTMXkQCN7E7egNDlQOqrP0awFZ5OWrYcbDdmgxa2jAEGtR3Fa m+GpAAH94H1crvcbSwIDAQAB -----END PUBLIC KEY-----' ; $PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCm418GwRwXmYOC6eb6G6NzCMRtnan7Jt76kygfmfa2mGRu1Ff8 t3bjyrrRPra8LQgcGxO1KZkDPxODsfX2fblXCNCzEXxYerZIrcQXR4utTMXkQCN7 E7egNDlQOqrP0awFZ5OWrYcbDdmgxa2jAEGtR3Fam+GpAAH94H1crvcbSwIDAQAB AoGBAKYm+RTgbfeQ/z33Yd7gZXrB387Cidlied0/ZVMRFm/0iQlOn8sbXWKtFBH/ Pi9bJhfVXWmgYJa61dLn+tnNkhdYsWCHxN3eMlLJ8XuQjvmrofWb1yZtWVblGhbd O9fSX2RH8m7DOxrV85/oP0qYTKfla8R21hKmdgo9JDeqMRUBAkEA2ZLqpnqXJ2qp FE3OHnQydnJQllAG7l1egYheQh0JmeI8CVrWjv40sK5clQK6kONj9JscD0ZPdCqq EVQb5dSWtQJBAMRc0hzEVpgo544lSIZV1sMiWwxVhDLpvuEUJZtSLh52FIt07Rt7 mVV0IExq7Z2bDX1yhHiqYPen7ck0GC0KKf8CQCTp3zPVkrWWTA9sz+6syi78YB3Q gAyK/NC/QTa4VHuuPX9c0RA7otbjDkQdzWdtnPTQKCeTR0GvR2FfQshwlA0CQGCZ zWALkxI+JVQ/sUMtHX9X+nTB6Uxmw9nU4H9d2YRw0MCeoDsB/jgU7gLKI+WCLwvE 97ipERUlDw0JzM7zjh8CQEz541yxg7sttBtEV2RZOd+8bMBaRJWXYqN86vn+dSjq ds4vY6KgESImQ7Y+o30TcgxgjGZlujZMLgqv9E4VmwY= -----END RSA PRIVATE KEY-----' ; include ( 'Crypt/RSA.php' ); $rsa = new Crypt_RSA (); $rsa->loadKey ( $PUBLIC_KEY ); // 载入公钥 $plaintext = 'phpsec' ; $rsa->setEncryptionMode ( CRYPT_RSA_ENCRYPTION_PKCS1 ); $ciphertext = $rsa->encrypt ( $plaintext ); $rsa->loadKey ( $PRIVATE_KEY ); // 载入私钥 echo $ciphertext.'<br />'.'<br />'.'<br />' ; echo $rsa->decrypt ( $ciphertext );
可以看到$rsa->encrypt($plaintext);函数用来加密,最终用$rsa->decrypt($ciphertext)来解密并输出明文字符串“phpsec”,效果如图 10-6 所示。
图 10-6
第一行的乱码就是加密后的“phpsec”,通常保存的时候还会用 Base64 转码一下才好。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论