python RSA

零:认识

如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易。上一篇文章 ssh 协议为什么安全 中的 ssh 协议也是基于 RSA 加密算法才能确保通讯是加密的,可靠的。

1976年以前,所有的加密方法都使用对称加密算法:加密和解密使用同一套规则。例如:甲使用密钥 A 加密,将密文传递给乙,乙仍使用密钥 A 解密。如果密钥 A 在甲传递给乙的过程中泄露,或者根据已知的几次密文和明文推导出密钥 A,则甲乙之间的通讯将毫无秘密。

1976年,两位美国计算机学家 Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不传递密钥的情况下,完成解密。这被称为 Diffie-Hellman密钥交换算法
假如甲要和乙通讯,甲使用公钥 A 加密,将密文传递给乙,乙使用私钥 B 解密得到明文。其中公钥在网络上传递,私钥只有乙自己拥有,不在网络上传递,这样即使知道了公钥 A 也无法解密。反过来通讯也一样。只要私钥不泄漏,通信就是安全的,这就是非对称加密算法。

1977年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。算法用他们三个人的名字命名,叫做 RSA 算法。直到现在,RSA 算法仍是最广泛使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有 RSA 算法。

一:python RSA-package

#生成秘钥和私钥
import rsa
(pubkey, privkey) = rsa.newkeys(512)
#加密和解密
import rsa
#1
#bob create public_key and private_key 
(bob_pubkey, bob_privkey) = rsa.newkeys(512)
#2
#alice get the public_key from bob and use public_key to send message to bob
message = "hello bob".encode("utf-8")
crypto = rsa.encrypt(message, bob_pubkey)
#3
#bob recv the message and use his private_key to read the message
message = rsa.decrypt(crypto, bob_privkey)
print(message.decode("utf-8"))

#RSA只能加密 比RSA编码程度小的数据;例如,一个512位密钥可以编码一个53字节的消息
#(512位= 64字节,其中11个字节用于随机填充和其他填充)
#保存私钥和公钥 #读取私钥和公钥
#write
import rsa

(pubkey, privkey) = rsa.newkeys(512)
pub_pkcs = pubkey.save_pkcs1()
pubfile = open('public.pem', 'wb+')
pubfile.write(pub_pkcs)
pubfile.close()

priv_pkcs = privkey.save_pkcs1()
prifile = open('private.pem', 'wb+')
prifile.write(priv_pkcs)
prifile.close()

#read
import rsa

with open('public.pem') as publickfile:
    p = publickfile.read()
    pubkey = rsa.PublicKey.load_pkcs1(p)
    print(pubkey)

with open('private.pem') as privatefile:
    p = privatefile.read()
    privkey = rsa.PrivateKey.load_pkcs1(p)
    print(privkey)
#签名 和 验证
# 理解:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
# 对message 通过加密生成 digest
# 再利用私钥对digest加密生成signature
# 将message + signature传送数据

# sign
message = 'Go left at the blue tree'.encode("utf-8")
hash = rsa.compute_hash(message, 'SHA-1')
signature = rsa.sign_hash(hash, private_key, 'SHA-1')
print(signature)

#verify
try:
	message = 'Go left at the blue tree'.encode("utf-8")
	tof = rsa.verify(message, signature, public_key)
	print(tof)
except Exception:
	print("verify wrong")

 

Python中的RSA是一种非对称加密算法,用于数据的加密和解密。您可以使用Python中的标准库`cryptography`来实现RSA算法。 下面是一个使用Python进行RSA加密和解密的示例代码: ```python from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives.asymmetric import rsa, padding # 生成RSA密钥对 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048 ) public_key = private_key.public_key() # 将密钥保存为PEM格式 pem_private_key = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) pem_public_key = public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) # 加密 message = b"Hello, RSA!" ciphertext = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) # 解密 plaintext = private_key.decrypt( ciphertext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) print("原始消息:", message) print("加密后:", ciphertext) print("解密后:", plaintext) ``` 这是一个简单的示例,展示了如何使用Python中的`cryptography`库进行RSA加密和解密操作。请注意,为了运行此代码,您需要先安装`cryptography`库。可以使用`pip install cryptography`命令进行安装。 希望这可以帮助到您!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值