zoukankan      html  css  js  c++  java
  • 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)) #加密后的二进制转换成 字符串

  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/cxx1/p/14524627.html
Copyright © 2011-2022 走看看