Pycrypto与RSA密码技术
密码与通信
pip install pycrypto
RSA 密码算法与签名
from Crypto import Random
from Crypto.PublicKey import RSA # 伪随机数生成器
random_generator = Random.new().read
# rsa算法生成实例
rsa = RSA.generate(1024, random_generator) # master的秘钥对的生成
private_pem = rsa.exportKey()
# 私钥
with open('master-private.pem', 'w') as f:
f.write(private_pem)
# 公钥
public_pem = rsa.publickey().exportKey()
with open('master-public.pem', 'w') as f:
f.write(public_pem)
# master-private.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCiVxAofpOL1lxbs2/66fXQksBd6Dc5PsB4vtpcBYbyxEp5CBCX
5pN0/NbVFwiyg/aOv5vvBXUMTsQkhr6kJXLmM9chVuPkedwQ7FESe7oLFNxuaDjZ
hYM9RasDJ4rE2NMwSN1M54mw6ZVpzPnRpnrawbZSzLkEOOvywmephmuHvwIDAQAB
AoGAPi6ZGtm5DHQ0dk+aEgMxzA2aL542IPA/a0C3hU38rdqwKAIF0RlZ3BLI+2BS
TYasl2sfgIOXnPpCuTb/qQJLKvP903yOjQDjnNAn2wp24FQKhhVzlaOwwiyHRN/U
LoUhcaaGFnGNL6r4E4ZM9beBLVVdn+g1bJn2HQawlVlGw9ECQQDLcSrUgzbuQeRi
HT3Q/HnDiVk7WXu4laJ/NRpTPj2HxjjaS2nI8IP/ndZvg7OU5Xc5tLkWh3b5RUgU
J7u6nJqJAkEAzEeUCJ0Df+i4zieu1ER9NUV6Ml9kFwCTAF7TzNAj5K1SZfSK9i1k
BbKxhEUdr8aYgReqhQkwqD6WEpI/Iv1eBwJAQF3Cvk/xjjpcxsoXp8ppv/rxt3xd
T45QRk0H0jSMBSwrCq33fzLRoItQsCGMLNzY9vH96Wncs4s+/dmAZM9teQJBAJjK
KMTQe5+d9yvqrm8B0wyXLLCkfH5f5ZNvWcdlHpOZt3mekJlUle1VHEUsVOn2Bnb3
tojOuN/9/81gKW0ISN0CQFMEyymdqARaTKrSpzYXkerE987TQJdaP6VVjNaBnbv+
VzAHW5qTJgcP/sABfw3dQ4+ocTU8yVTlBgtleeHmZxg=
-----END RSA PRIVATE KEY----- # master-public.pem -----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiVxAofpOL1lxbs2/66fXQksBd
6Dc5PsB4vtpcBYbyxEp5CBCX5pN0/NbVFwiyg/aOv5vvBXUMTsQkhr6kJXLmM9ch
VuPkedwQ7FESe7oLFNxuaDjZhYM9RasDJ4rE2NMwSN1M54mw6ZVpzPnRpnrawbZS
zLkEOOvywmephmuHvwIDAQAB
-----END PUBLIC KEY-----
生成的私钥和公钥
加密与解密
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 # 加密内容
message = "hello"
# 加密
with open('master-public.pem', 'r') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(message))
print(cipher_text)
# IpAX4ZynawSsxI4/0RGEHpFT/U2E7VXDLN36+QONelxnid5jziq/Epk6Xsv3iBEWvRdmdcTYf/0zBHnnwg515K/
# a45JeaKV/DQwc2Qeq+lsFBuDyUFN/RnC6zGTMUzkAzCmbVH3NPiX9UzZo6Rjr7y2Zm6zUWsLgL/D3/QDh/IU= # 解密
with open('master-private.pem', 'r') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
text = cipher.decrypt(base64.b64decode(cipher_text), random_generator)
print(str(text)) # hello
签名与验签
import base64
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA, MD5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5 message = "hello"
# 签名
with open('master-private.pem', 'r') as f:
key = f.read()
rsakey = RSA.importKey(key)
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new() # MD5.new()
digest.update(message)
sign = signer.sign(digest)
signature = base64.b64encode(sign)
print(signature)
# JpDhJPGl1MG5T2l5aggPBMbIzjKqyYmB7Q3MkqbJtj1Z5FVSP6dTthspEVrFarNxA51hx5mLbbs9mLCFK++dy4z
# QdpgkSjBgyisWBHCKDbgskvu8DZCn6STZ0o0Ml9r+h4Oj++JX3SwmUNjzEYIgdp3jTIh12bZzgfoJmY8k4Rk= # 验签
with open('master-public.pem', 'r') as f:
key = f.read()
rsakey = RSA.importKey(key)
verifier = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(message)
is_verify = verifier.verify(digest, base64.b64decode(signature))
print(is_verify) # True
总结
Pycrypto与RSA密码技术的更多相关文章
- Pycrypto与RSA密码技术笔记
密码与通信 密码技术是一门历史悠久的技术.信息传播离不开加密与解密.密码技术的用途主要源于两个方面,加密/解密和签名/验签 在信息传播中,通常有发送者,接受者和窃听者三个角色.假设发送者Master想 ...
- 杂项之python利用pycrypto实现RSA
杂项之python利用pycrypto实现RSA 本节内容 pycrypto模块简介 RSA的公私钥生成 RSA使用公钥加密数据 RSA使用私钥解密密文 破解博客园登陆 pycrypto模块简介 py ...
- 密码技术之密钥、随机数、PGP、SSL/TLS
第三部分:密码技术之密钥.随机数.PGP.SSL/TLS 密码的本质就是将较长的消息变成较短的秘密消息——密钥. 一.密钥 什么是密钥? (1)密钥就是一个巨大的数字,然而密钥数字本身的大小不重要,重 ...
- 公钥密码之RSA密码算法大素数判定:Miller-Rabin判定法!
公钥密码之RSA密码算法大素数判定:Miller-Rabin判定法! 先存档再说,以后实验报告还得打印上交. Miller-Rabin大素数判定对于学算法的人来讲不是什么难事,主要了解其原理. 先来灌 ...
- 密码学笔记(2)——RSA密码
上一篇笔记中讲述了大量的代数知识,这一篇中我们看看如何将这些代数知识应用到RSA密码体制中. 一.公钥密码学简介 在经典密码学的研究模型中,我们根据已选择的秘钥K得到一条加密规则$e_{k}$和一条解 ...
- 了解SSL必须要懂得密码技术
要理解SSL就必须理解密码系统.消息摘要函数(单向或散列函数)和数字签名,这些技术是许多文献所讨论的主题(比如[AC96),提供了保密性.完整性和认证的基础. 密码系统 假设Alice想给她的银行发一 ...
- 《图解密码技术》-chaper1-概述
密码和信息安全常识: (1)不要使用保密的密码算法. (2)不要使用低强度密码算法. (3)密码一定会被破解. (4)密码只是信息安全的一部分.
- 使用TortoiseGit和Git Bash不需要输入RSA密码(passphrase)的方法
1. 安装和配置Putty 安装 官网下载Putty并安装. 生成ppk密钥 打开puttygen.exe(C:\Program Files\PuTTY\puttygen.exe), 点Convers ...
- 【密码技术】Part 4 SSL/TLS
01 SSL/TLS基本概念 02 TLS协议流程图
随机推荐
- 重拾c++第一天(2):基本语法
1.输出方法: cout<<"输出语句" 2.输出时换行为 cout<<endl or "\n" 3.连续赋值是合法的,从右往左依次赋值 ...
- 创建模仿存储库 Making a Mock Repository 精通ASP-NET-MVC-5-弗瑞曼 Listing 7-5
- NOI2.5 1490:A Knight's Journey
描述 Background The knight is getting bored of seeing the same black and white squares again and again ...
- CSS-01-引入css的三种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios--->tableView的估算高度的作用
ios中tableView的估算高度的作用 在ios7之后,tableView有了估算高度的这个概念及相关属性和方法:它的作用和使用场景是什么? 在tableview加载完数据渲染之后,考虑到滚动条的 ...
- SpringBoot学习(三):日志
1.日志框架 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件? 2.框架来记录系统的一些运行时信息: ...
- SpringCloud与微服务Ⅵ --- Ribbon负载均衡
一.Ribbon是什么 Sping Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户 ...
- linux 移动复制删除
linux下文件的复制.移动与删除命令为:cp,mv,rm一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) ...
- C# list中ConvertAll的使用
static double TakeSquareRoot(int x) { //return Math.Sqrt(x); ; } static void Main(string[] args) { L ...
- Stopping service [Tomcat] Disconnected from the target VM, address:XXXXXX解决方案
原文出处:https://blog.csdn.net/u013294097/article/details/90677049 Stopping service [Tomcat] Disconnecte ...