• python对明文进行RSA加密


    rsa加密是什么?

    rsa加密是一种非对称的加密算法,就是加密秘钥和解密秘钥是不同的。用公钥进行加密,私钥进行解密。

    加密:公钥 (e,n) 计算 

    解密:私钥(d,n)计算

    python怎么进行加密?

    从上面的图中可以知道,A对明文进行加密,需使用到B发送给A的公钥,那就先要获取到公钥。(公钥(e,n):e (Exponent)--指数;n(Modulus)—模数)

    ① 抓包看第一个请求的响应结果:有看到2个参数Exponent、Modulus。

    但是这两个值都是字符串,我们需要的是两个整数。故要对它先进行转换。

    ② 字符串转换成十进制 

    import base64
    import binascii
    e_str=base64.b64decode('AQAB') #返回解码后的二进制数据(文本字符串转换成二进制数据)
    m_str=base64.b64decode('AJONEgY58nD12OcAXv7P9UGPPsZOGLKj/IQjPf+gzyujHmXZoe3lFN1/PgxaqttzAAlC6DXgumvnyfjXc8csfkJz2oyaQiPMS2+TGipdZ1M3Rm1NlNO2K9yq8VeLFgZUhNCJTkS8RNoQ9pWT7EsAPGYINqmNh329Ltp/7JK7kyyl')
    print(m_str)
    print(e_str)
    m_hex = binascii.b2a_hex(m_str) #返回二进制数据的十六进制表示(二进制转换成十六进制)
    e_hex = binascii.b2a_hex(e_str)
    print(m_hex)
    print(e_hex)
    e=int(e_hex,16) # 将16进制大端格式字符串转换为大整数(十六进制转换成十进制)
    n=int(m_hex,16)
    print(e)
    print(n)

     知识点

    1)Base64是一种用64个字符来表示任意二进制数据的方法。是一种最常见的二进制编码方法

    方法

    说明

     

    base64.b64encode(data)

    编码:二进制转换成文本字符串

     

    base64.b64decode(string)

    解码:文本字符串转换成二进制

     

    2) binascii模块包含很多用来方法来转换二进制和各种ASCII编码的二进制表示法。binascii二进制和ASCII转换

    方法

    说明

     

    binascii.a2b_base64(string)

    转换的base64数据块为二进制,并返回二进制数据。一次可以传递多行。

    和base64.b64decode对应。

    binascii.b2a_base64(data)

    转换二进制数据为一行base64编码的ASCII字符。返回字符串包含换行符。根据base64的标准data的长度最大为57。

    和base64.b64encode对应。

    binascii.b2a_hex(data)和binascii.hexlify(data)

    返回二进制数据的十六进制表示。每个字节被转换成相应的2位十六进制表示形式。因此,得到的字符串是是原数据长度的两倍。

     

    binascii.a2b_hex(hexstr)和binascii.unhexlify(hexstr)

    从十六进制字符串hexstr返回二进制数据。是b2a_hex的逆向操作。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则报TypeError。

     

    3)int转换成整数 int(x, base=10)

    • x -- 字符串或数字。

    • base -- 进制数,默认十进制。

    int(x)–不传入base,x必须是数字int(x,base=16)–x是字符串形式,是16进制表达式(16进制转换成2进制)

    ③ 获取到模数和指数后,生成公钥进行加密 

    根据 模数和指数,生成公钥

    from cryptography.hazmat.primitives.asymmetric import rsa,padding
    from cryptography.hazmat.backends import default_backend
    pubkey=rsa.RSAPublicNumbers(e,n).public_key(default_backend())
    print(pubkey)
    key = pubkey.encrypt('abc12345'.encode('utf-8'),padding.PKCS1v15()) #使用公钥对明文“abc12345”加密,返回加密后的二进制数据
    print(key)
    print(binascii.b2a_base64(key)) #加密后的二进制转换成 字符串

  • 相关阅读:
    jichu
    scanf
    数位dp
    hdu 5667
    华东交通大学2018年ACM“双基”程序设计竞赛 K
    华东交通大学2018年ACM“双基”程序设计竞赛 D
    map
    次小生成树
    set
    c++11之为什么C++11引入了std::ref?
  • 原文地址:https://www.cnblogs.com/cxx1/p/14524627.html
Copyright © 2020-2023  润新知