RSA 非对称加密

对称加密 和 非对称加密 的基本定义来源于维基百科,请参考文献1和2。


对称密钥加密

  Symmetric-key algorithm,又称对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。实际上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系[1]。与公开密钥加密相比,要求双方取得相同的密钥是对称密钥加密的主要缺点之一。常见的对称加密算法DES3DESAESBlowfishIDEARC5RC6

公开密钥加密

  Public-key cryptography,又为非对称(密钥)加密,该思想最早由雷夫·莫寇(Ralph C. Merkle)在1974年提出,之后在1976年。狄菲(Whitfield Diffie)与赫尔曼(Martin Hellman)两位学者以单向函数单向暗门函数为基础,为发讯与收讯的两方创建密钥。

  非对称密钥,是指一对加密密钥解密密钥,这两个密钥是数学相关,用加密密钥加密后只能用解密密钥解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥

  • 如果加密密钥是公开的,这用于客户给私钥所有者上传加密的数据,这被称作为公开密钥加密。例如,网络银行的客户发给银行网站的账户操作的加密数据。
  • 如果解密密钥是公开的,即私钥加密的信息,可以用公钥对其解密。客户可以验证持有私钥一方发布的数据或文件是完整准确的,接收者由此可判定这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。例如,从网上下载的安装程序,一般都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。

  常见的公钥加密算法有: RSAElGamal背包算法Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法英语Elliptic Curve Cryptography, ECC)。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是著名的公开金钥加密算法。

P.S. 关于数字签名,请参考一篇好的博文, 猛击我


RSA加密算法

  RSA算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。尽管如此,只有一些RSA算法的变种被证明为其安全性依赖于因数分解。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。


下面,我们给我一个Python RSA的demo程序。代码来源于http://stuvel.eu/files/python-rsa-doc/usage.html手册。首先,我们产生一对公钥和私钥。然后,对message用公钥加密,再用私钥进行解密。 注意,如果我们用私钥对message加密,再用公钥解密将会出错。我们用私钥和安全散列算法SHA-1对message进行数字签名,之后再用公钥验证签名。


# -*- coding: utf-8 -*-
import rsa

# 先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用
(pubkey, privkey) = rsa.newkeys(1024)
print pubkey
print privkey

message = 'Hello RSA!!'

# 用公钥加密、再用私钥解密
crypto = rsa.encrypt(message, pubkey)
message = rsa.decrypt(crypto, privkey)
print message

# sign 用私钥签名、再用公钥验证签名
signature = rsa.sign(message, privkey, 'SHA-1') #SHA, Secure Hash Algorithm 安全散列算法
rsa.verify(message, signature, pubkey)
rsa.verify('Hello', signature, pubkey)


参考文献:

1,对称密钥加密

2,公开密钥加密

3, http://pypi.python.org/pypi/rsa

4,http://stuvel.eu/files/python-rsa-doc/usage.html

5, https://pypi.python.org/pypi/pyasn1/0.1.7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值