目前加解算法可分为分为对称密码和非对称密码(公钥密码)。其中,对称密码的加解密使用同一种密钥的方式,而非对称密码(公钥密码)的加解密使用不同的密码的方式。
RSA是RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。
正是基于这种理论,1978年出现了著名的RSA算法,它由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
加解密的大致过程为:先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位,这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要 。
对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠,RSA从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被破解的。
RSA加解密方式
1、消息编码转换。
通常使用base64编程(Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64是一种基于64个可打印字符来表示二进制数据的方法。)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-10-3-1.py
import base64
def enCodeBase64(myStr):
return base64.b64encode(myStr.encode("utf8"))
def deCodeBase64(myStr):
return base64.b64decode(myStr).decode("utf8")
strTxt="""
1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,
其中之一是保密密钥,由用户保存;
另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。
这就使加密的计算量很大。
"""
print("\n---------------base64编码---------------------\n")
encodeStr=enCodeBase64(strTxt)
print(encodeStr)
print("\n----------------base64解码--------------------\n")
decodeStr=deCodeBase64(encodeStr)
print(decodeStr)