加密 解密 RSA & AES & DES
git: https://github.com/XHTeng/XHCryptorTools
- rsa
RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题。明文长度需要小于密钥长度,而密文长度则等于密钥长度。因此当加密内容长度大于密钥长度时,有效的RSA加解密就需要对内容进行分段。
这是因为,RSA算法本身要求加密内容也就是明文长度m必须0<m<密钥长度n。如果小于这个长度就需要进行padding,因为如果没有padding,就无法确定解密后内容的真实长度,字符串之类的内容问题还不大,以0作为结束符,但对二进制数据就很难,因为不确定后面的0是内容还是内容结束符。而只要用到padding,那么就要占用实际的明文长度,于是实际明文长度需要减去padding字节长度。我们一般使用的padding标准有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建议的padding就占用了11个字节。
PKCS#1 - 11
OAEP - 42
k-2hLen-2
sha1 (size+1)//8-2*20-2
这样,对于1024长度的密钥。128字节(1024bits)-减去11字节正好是117字节,但对于RSA加密来讲,padding也是参与加密的,所以,依然按照1024bits去理解,但实际的明文只有117字节了。
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from Crypto.Hash import SHA, MD5 def rsa_md5_sign(data, pri_key):
h = MD5.new(data.encode())
signer = PKCS1_v1_5.new(RSA.importKey(pri_key))
signature = signer.sign(h)
return base64.b64encode(signature).decode() def rsa_md5_verify(data, sign, pub_key):
key = RSA.importKey(pub_key)
signer = PKCS1_v1_5.new(key)
h = MD5.new(data.encode())
return signer.verify(h, base64.b64decode(sign)) def rsa_en(msg, pub):
pubkey = RSA.importKey(pub)
pubobj = PKCS1_v1_5.new(pubkey)
res = []
data = msg.encode()
check_len = (pubkey.size() + 1) // 8 - 11
for i in range(0, len(data), check_len):
res.append(pubobj.encrypt(data[i:i + check_len]))
a = b"".join(res)
return base64.b64encode(a).decode() def rsa_de(msg, pri):
prikey = RSA.importKey(pri)
priobj = PKCS1_v1_5.new(prikey)
res = []
data = base64.b64decode(msg)
length = len(data)
check_len = (prikey.size() + 1) // 8
for i in range(0, length, check_len):
res.append(priobj.decrypt(data[i:i+check_len], b'').decode())
return "".join(res)
加密 解密 RSA & AES & DES的更多相关文章
- DES加密解密与AES加密解密
		随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ... 
- php中des加密解密 匹配C#des加密解密 对称加密
		原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数 可以用于C#和php通信 对数据进行加密,其中$key 是 ... 
- NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密
		本文列举了 数据加密算法(Data Encryption Algorithm,DEA) 密码学中的高级加密标准(Advanced EncryptionStandard,AES)RSA公钥加密算法 ... 
- .Net(c#)加密解密之Aes和Des
		.Net(c#)加密解密工具类: /// <summary> /// .Net加密解密帮助类 /// </summary> public class NetCryptoHelp ... 
- MD5加密,Base64加密/解密,AES加密/解密
		1.从github上下载GTMBase64-master和AESCrypt-ObjC-master导入工程,如下图所示. 2.使用前的配置及注意事项: (1) 在build phases中的GTMBa ... 
- 使用java实现对称加密解密(AES),非对称加密解密(RSA)
		对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ... 
- python 加密解密(base64, AES)
		1. 使用base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1) print s1, s2 结果 1 2 ... 
- C# RSACryptoServiceProvider 加密解密 RSA 加密解密
		什么是RSA:RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥 推导出 解密密钥在计算上是不可行的”密码体制. 下附代码,在控制台中粘贴在启动类即 ... 
- 工作中拓展的加密解密传输方式. DES对称加密传输.
		系统间通过xml传输, 不能采用明文, 就加密传输. 秘钥(真正有效的是前8位)存储于配置中. public static string EncryptStr(this string content, ... 
随机推荐
- Django Cookie和Seesion
			1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生.cookie的工作原理是:由服务器产生内容,浏览器 ... 
- 云栖大会day1 上午
			参与云栖大会第一天感受 早晨参与内容 数据智能实践专场 议程是 09:00-09:25 互联网下半场用户增长之路 吕志国 [友盟+]CPO 09:25-09:50 数据开启智慧零售的升级引擎 刘延明 ... 
- Dnsmasq 配置PXE批量安装系统
			以下测试都是基于centos 7下的环境 需要安装的软件为 nginx 用来下载ks.cfg和系统镜像文件用的,也可以用ftp服务器来代替 dnsmasq 提供dhcp服务和tftp服务,也可以单独去 ... 
- cpu资源长期使用率过高导致系统内核锁问题
			服务器跑大量高负载程序,会造成cpu soft lockup. 解决办法: #追加到配置文件中 echo 30 > /proc/sys/kernel/watchdog_thresh #查看 [r ... 
- YDWE Keynote
			[YDWE Keynote] 1.使用YDWE制作的地图,需要在禁用黑色阴影.迷雾.否则进入游戏将漆黑一片,什么都看不到. 2. 3. 4. 5. 6. 
- Lua + Redis 解决高并发
			一.业务背景 优惠券业务主要提供用户领券和消券的功能:领取优惠券的动作由用户直接发起,由于资源有限,我们必须对用户的领取动作进行一些常规约束. 约束1(优惠券维度): 券的最大数量 max: 约束2( ... 
- office2016产品密钥
			office2016专业增强版产品密钥: VL批量授权版:QCKNG-29MKJ-74G4B-X7DT8-JFHBB(亲测有效) office2016专业增强版密钥(Retail零售版),可电话激活 ... 
- Linux - 文件和目录常用命令
			文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ... 
- 再次认识void
			重新认识void 在初学c/c++时感觉void是一个很不起眼的关键字.因为在c++中我使用的还是比较少的.但是到了Linux中,不论是在内核源码中还是在程序编写的过程中有关void与*的组合随处可见 ... 
- python—列表生成式
			#原始写法 l=[] for i in range(1,11): l.append(str(i).zfill(2)) print(l) #结果:['01', '02', '03', '04', '05 ... 
