python常见库的使用 python语言基础?
python语言基础?
Python语言诞生于90年代初,早期主要用于做科学计算的研究机构。近年来,由于web、大数据和人工智能的发展,它被广泛应用于系统管理任务的处理和web编程中,被称为比较流行的编程语言之一。
Python是用C语言开发的,但是python不再有C语言的指针等复杂的数据类型。python的简单性大大减少了软件的代码,进一步简化了开发任务。
Python如何玩转加密?
1、生成公钥和私钥对
使用openssl工具生成RSA公钥和私钥对。
1.下载openssl工具。下载地址
2.打开openssl文件夹下的bin文件夹,执行openssl.exe文件;
3.生成RSA私钥命令:
这里生成的密钥文件是2048位。
genrsa -out rsa_private_ 2048
4.生成RSA公钥命令:
注意,公钥和私钥是成对的,所以你生成一个后,另一个是基于前一个的文件名生成的,否则就不是一对!!
RSA-in RSA _ private _-pub out-out RSA _ public _
生成的文件应该在您的用户目录中,或者在openssl的bin文件夹中(有时它 在这里,有时它 它不在那里,这真令人困惑。反正两个地方都找就行了,肯定是有的)。
5.让 让我们在这里介绍RSA密钥文件的规则。文件名都是。pem为后缀,生成的RSA密钥可以看做全部。
以-begin RSA private key-开始并以-end RSA private key-结束的字符串,没有换行符,这是原始的RSA私钥。
第二,安装—pycryptodome,python支持的加密库。
我用的是Python版,网上搜了一下。在python3.6之前,大部分版本都是用pycrypto加密的,但是在python3.6之后,因为没有人维护pycrypto,所以改名为pycryptodome。这个库的强大之处在于它是pycrypto库的扩展,使用起来更加方便灵活。
安装pycryptodome
如果你安装pip,它 这很简单。
pip3安装pycryptodom:
无键
try:
钥匙(打开(fn)。r:除外
打印(导入rsa密钥文件时出错,fn,:
r:
r:除外
Print(将字符串密钥转换为rsa格式密钥时出错,skey,err)
返回ret
加密
从进口PKCS1_OA:
密文b
try:
密码PKCS1_(rsa_key)
密文cipher.encrypt(数据)
:除外
打印(RSA加密失败,,错误)
返回密文
因为RSA在加密过程中只能加密最大长度的字符串,所以如果你加密的数据太长,你需要在加密过程中分段加密。同样,解密也是分段解密。
1024位证书加密时最多支持117字节,解密时最多支持128字节;
2048位证书在加密时最多支持245字节,在解密时最多支持256字节。
加密时支持的最大字节数:证书位数/8 -11(例如:2048位证书,支持的最大加密字节数:2048/8-11-245)。
其中,11个字节为保留字节。
我上面的密钥文件是2048位,所以加密块长度是245字节。
4.加密块
#根据密钥长度计算块大小
def get_block_siz:
try:
# RSA只支持有限长度内的数据加密解密,需要分区。
#块大小block_r:
引发Runtim:
r:除外
Print(计算加密和解密数据块大小时出错,rsa_k:
bs获取块大小(rsa密钥)
对于i in rang:
收益率数据[i:i bs]
无论加密中使用的段的大小如何,RSA都会对段进行解密,并根据/8的密钥长度对其进行解密。
译
从进口PKCS1_OA:
r:
密码PKCS1_(rsa_k:除外
打印(RSA解密失败,,错误)
返回ret_data
符号
从导入pkcs1_15
来自Crypto。哈希导入SHA256
# RSA签名
d:
签名
try:
h(数据)
签名pkcs1_(rsa_k:除外
打印(RSA签名失败,,错误)
返回签名
检查签名
# RSA签名验证
定义rsa_sign_v:
尝试:
h(数据)
pkcs1_(rsa_k:
ret False
返回ret
加密解密类(我把RSA加密解密封装成一个类,方便后续直接调用),完整代码如下:
#-*-coding: utf-8-*-
作为密码导入
作为符号导入
导入加密。哈希作为哈希
从导入RSA
从导入PKCS1_v1_5作为PKCS1_v1_5_cipper
从导入PKCS1_v1_5作为PKCS1_v1_5_sign
来自Crypto。哈希导入SHA1
Rsa:级
RSA加密和解密签名类
def __int__(self,ciper_libPKCS1_v1_5_cipper,sign_libPKCS1_v1_5_sign,hash_libSHA1,
pub_fil:
#加密和解密库
_lib cip:
_k:
_k:
_k:
_k:
_k:
_key(打开(pri_file)。read())
#块保留长度
_反转_大小反转sed_size
#根据密钥长度计算块大小
def get_block_siz:
try:
# RSA只支持有限长度内的数据加密解密,需要分区。
#块大小
保留大小反转大小
密钥大小rsa__in_bits()
if (k:
引发Runtim:
r:除外
Print(计算加密和解密数据块大小时出错,rsa_k:
bs _块_大小(rsa_k:
收益率数据[i:i bs]
#加密
定义编码字节(自身,数据,k:
文本b
try:
rsa_k:
rsa_k:
cur_t:除外
打印(RSA加密失败,数据,错误)
返回文本
#解密
定义dec_byt:
文本b
try:
rsa_k:
rsa_k:
如果键入(_ lib)_OA:
当前文本(日期)
:
Cur_t:除外
打印(RSA解密失败,数据,错误)
返回文本
# RSA签名
定义符号_字节(自身,数据,k:
签名
try:
rsa_k:
rsa_k:除外
打印(RSA签名失败,,错误)
返回签名
# RSA签名验证
定义签名_验证(自我,数据,签名,k:
try:
rsa_k:
rsa_k:
r:
及格
如果__姓名_ _ __main__:
主()
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。