返回介绍

RSA 加密

发布于 2024-10-11 22:07:47 字数 2828 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文