精华内容
下载资源
问答
  • Python使用rsa模块实现非对称加密解密1、简单介绍:RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK...

    Python使用rsa模块实现非对称加密与解密

    1、简单介绍:

    RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

    RSA密钥至少为500位长,一般推荐使用1024位。RSA密钥长度随着保密级别提高,增加很快。

    由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序就会抛出异常。 ——来自大佬

    2、代码实现:

    import rsa

    # 一、生成公钥及私钥, 并保存

    public_key, private_key = rsa.newkeys(1024) # 生成公钥和私钥

    # 将生成的公钥和私钥进行转换,以便存储

    pub = public_key.save_pkcs1()

    pri = private_key.save_pkcs1('PEM') # save_pkcsl()是内置方法,其默认参数是‘PEM’

    with open('pubkey.pem', mode='wb') as f, open('privkey.pem', mode='wb') as f1:

    f.write(pub) # 打开两个文件,分别存储公钥及私钥

    f1.write(pri)

    # 二. 使用公钥加密, 私钥解密

    def func():

    with open('pubkey.pem', mode='rb') as f, open('privkey.pem', 'rb') as f1:

    pub = f.read() # 从文件中再读出公钥和私钥

    pri = f1.read()

    public_key = rsa.PublicKey.load_pkcs1(pub) # 转换为原始状态

    private_key = rsa.PrivateKey.load_pkcs1(pri)

    message = "rsa加密测试"

    info = rsa.encrypt(message.encode('utf-8'), public_key) # 使用公钥加密内容,内容必须是二进制

    msg = rsa.decrypt(info, private_key) # 使用私钥解密,获得解密后的内容

    print(msg.decode('utf-8')) # 使用之前记得先解码

    3、代码升级:

    现在我将上述的代码段封装成一个Rsa class(包含的方法有:__init__——初始化方法,key_transform_store——存储公钥与私钥的方法、encry——加密方法、decry——解密方法),使用的时候,直接将下面的代码段拎到我们需要的地方去引用:先创建一Rsa对象,然后调用里面的方法即可:

    import rsa

    class Rsa(object):

    """RSA加密、解密"""

    def __init__(self, number, pub_path='public_key.pem', priv_path='private_key.pem'):

    """

    :param pub_path: the path to public key, default its path is public_key.pem

    :param priv_path: the path to private key, default its path is private_key.pem

    """

    # Generate the public and private keys, and returns them

    self.public_key, self.private_key = rsa.newkeys(number)

    self.public_key_path = pub_path

    self.private_key_path = priv_path

    def key_transform_store(self):

    """

    convert and save the generated public and private keys to a file

    :return: None

    """

    # convert the generated public and private keys for storage

    pub = self.public_key.save_pkcs1()

    pri = self.private_key.save_pkcs1('PEM')

    # open two files to store the public key and private key respectively

    with open(self.public_key_path, mode='wb') as f:

    f.write(pub)

    with open(self.private_key_path, mode='wb') as f1:

    f1.write(pri)

    def encry(self, info):

    """

    encrypt information

    :param info: the original string information to be encrypted

    :return:info_encrypted

    """

    # read the public key from the file

    with open(self.public_key_path, mode='rb') as f:

    pub = f.read()

    # convert pub to original state

    public_key = rsa.PublicKey.load_pkcs1(pub)

    # use the public key to encrypt the content, which must be binary

    info_encrypted = rsa.encrypt(info.encode('utf-8'), public_key)

    return info_encrypted

    def decry(self, info_encrypted):

    """

    decrypt information

    :param info_encrypted: encrypted information

    :return: info

    """

    # read the private key from the file

    with open(self.private_key_path, 'rb') as f:

    pri = f.read()

    # convert pri to original state

    private_key = rsa.PrivateKey.load_pkcs1(pri)

    # decrypt with private key to obtain the decrypted content

    msg = rsa.decrypt(info_encrypted, private_key)

    info = msg.decode('utf-8') # decode

    return info

    rsa_obj = Rsa(1024) # 实例化

    rsa_obj.key_transform_store() #

    info_encrypted = rsa_obj.encry('我是真心喜欢你的。') # 加密

    print(info_encrypted)

    info = rsa_obj.decry(info_encrypted) # 解密

    print(info) # 我是真心喜欢你的。

    这里会出现一个问题:由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序就会抛出异常。如下测试会抛出:OverflowError: 189 bytes needed for message, but there is only space for 117

    rsa_obj = Rsa(1024) # 实例化

    rsa_obj.key_transform_store() #

    info_encrypted = rsa_obj.encry('我是真心喜欢你的。我是真心喜欢你的。我是真心喜欢你的。我是真心喜欢你的。我是真心喜欢你的。我是真心喜欢你的。我是真心喜欢你的。') # 加密

    print(info_encrypted)

    info = rsa_obj.decry(info_encrypted) # 解密

    print(info)

    。。。。。。

    后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rsa加密, 最后对rsa解密后的内容进行bas64解密。

    以上。

    展开全文
  • 这篇文章主要介绍了Python如何基于rsa模块实现非对称加密解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、简单介绍:RSA加密算法是一种非对称加密算法 ...

    这篇文章主要介绍了Python如何基于rsa模块实现非对称加密与解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    1、简单介绍:

    RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

    RSA密钥至少为500位长,一般推荐使用1024位。RSA密钥长度随着保密级别提高,增加很快。

    由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序就会抛出异常。 ——来自大佬

    2、代码实现:

    来一段大佬的代码:

    ?

    3、代码升级:

    现在我将上述的代码段封装成一个Rsa class(包含的方法有:__init__——初始化方法,key_transform_store——存储公钥与私钥的方法、encry——加密方法、decry——解密方法),使用的时候,直接将下面的代码段拎到我们需要的地方去引用:先创建一Rsa对象,然后调用里面的方法即可:

    ?

    这里会出现一个问题:由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序就会抛出异常。如下测试会抛出:

    OverflowError: 189 bytes needed for message, but there is only space for 117

    ?

    后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rsa加密, 最后对rsa解密后的内容进行bas64解密。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

    原文链接:https://www.cnblogs.com/sirxy/p/12141633.html

    展开全文
  • 我想了解证书和非对称加密是如何工作的。我正在寻找一个python库,在那里我可以导入公共或私有的ca签名证书并自动加密或解密字符串格式的消息,我查看了python源代码中嵌入的加密库,但我不知道如何在证书的这一部分...

    我想了解证书和非对称加密是如何工作的。我正在寻找一个python库,在那里我可以导入公共或私有的ca签名证书并自动加密或解密字符串格式的消息,我查看了python源代码中嵌入的加密库,但我不知道如何在证书的这一部分中使用十六进制模和指数:RSA Public Key: (1024 bit)

    Modulus (1024 bit):

    00:b4:31:98:0a:c4:bc:62:c1:88:aa:dc:b0:c8:bb:

    33:35:19:d5:0c:64:b9:3d:41:b2:96:fc:f3:31:e1:

    66:36:d0:8e:56:12:44:ba:75:eb:e8:1c:9c:5b:66:

    70:33:52:14:c9:ec:4f:91:51:70:39:de:53:85:17:

    16:94:6e:ee:f4:d5:6f:d5:ca:b3:47:5e:1b:0c:7b:

    c5:cc:2b:6b:c1:90:c3:16:31:0d:bf:7a:c7:47:77:

    8f:a0:21:c7:4c:d0:16:65:00:c1:0f:d7:b8:80:e3:

    d2:75:6b:c1:ea:9e:5c:5c:ea:7d:c1:a1:10:bc:b8:

    e8:35:1c:9e:27:52:7e:41:8f

    Exponent: 65537 (0x10001)

    有人能帮我吗?在

    谢谢

    展开全文
  • 本文实例讲述了Python3非对称加密算法RSA。分享给大家供大家参考,...其中 python3.6 Crypto 库的安装方式请参考前面一篇《Python3对称加密算法AES、DES3》rsa 加解密的库使用 pip3 install rsa 就行了C:\WINDOWS\sy...

    本文实例讲述了Python3非对称加密算法RSA。分享给大家供大家参考,具体如下:

    python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥、私钥。

    其中 python3.6 Crypto 库的安装方式请参考前面一篇《Python3对称加密算法AES、DES3》

    rsa 加解密的库使用 pip3 install rsa 就行了

    C:\WINDOWS\system32>pip3 install rsa

    Collecting rsa

    Downloading https://files.pythonhosted.org/packages/e1/ae/baedc9cb175552e95f3395c43055a6a5e125ae4d48a1d7a924baca83e92e/rsa-3.4.2-py2.py3-none-any.whl (46kB)

    100% |████████████████████████████████| 51kB 99kB/s

    Collecting pyasn1>=0.1.3 (from rsa)

    Downloading https://files.pythonhosted.org/packages/a0/70/2c27740f08e477499ce19eefe05dbcae6f19fdc49e9e82ce4768be0643b9/pyasn1-0.4.3-py2.py3-none-any.whl (72kB)

    100% |████████████████████████████████| 81kB 289kB/s

    Installing collected packages: pyasn1, rsa

    Successfully installed pyasn1-0.4.3 rsa-3.4.2

    使用 Crypto.PublicKey.RSA 生成公钥、私钥:

    import Crypto.PublicKey.RSA

    import Crypto.Random

    x = Crypto.PublicKey.RSA.generate(2048)

    a = x.exportKey("PEM") # 生成私钥

    b = x.publickey().exportKey() # 生成公钥

    with open("a.pem", "wb") as x:

    x.write(a)

    with open("b.pem", "wb") as x:

    x.write(b)

    y = Crypto.PublicKey.RSA.generate(2048, Crypto.Random.new().read) # 使用 Crypto.Random.new().read 伪随机数生成器

    c = y.exportKey() # 生成私钥

    d = y.publickey().exportKey() #生成公钥

    with open("c.pem", "wb") as x:

    x.write(c)

    with open("d.pem", "wb") as x:

    x.write(d)

    使用 Crypto.PublicKey.RSA.importKey(private_key) 生成公钥和证书:

    import Crypto.PublicKey.RSA

    with open("a.pem", "rb") as x:

    xx = Crypto.PublicKey.RSA.importKey(x.read())

    b = xx.publickey().exportKey() # 生成公钥

    with open("b.pem", "wb") as x:

    x.write(b)

    a = xx.exportKey("DER") # 生成 DER 格式的证书

    with open("a.der", "wb") as x:

    x.write(a)

    使用 rsa 生成公钥、私钥:

    import rsa

    f, e = rsa.newkeys(2048) # 生成公钥、私钥

    e = e.save_pkcs1() # 保存为 .pem 格式

    with open("e.pem", "wb") as x: # 保存私钥

    x.write(e)

    f = f.save_pkcs1() # 保存为 .pem 格式

    with open("f.pem", "wb") as x: # 保存公钥

    x.write(f)

    RSA非对称加密算法实现:

    使用Crypto模块:

    import Crypto.PublicKey.RSA

    import Crypto.Cipher.PKCS1_v1_5

    import Crypto.Random

    import Crypto.Signature.PKCS1_v1_5

    import Crypto.Hash

    y = b"abcdefg1234567"

    with open("b.pem", "rb") as x:

    b = x.read()

    cipher_public = Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(b))

    cipher_text = cipher_public.encrypt(y) # 使用公钥进行加密

    with open("a.pem", "rb") as x:

    a = x.read()

    cipher_private = Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(a))

    text = cipher_private.decrypt(cipher_text, Crypto.Random.new().read) # 使用私钥进行解密

    assert text == y # 断言验证

    with open("c.pem", "rb") as x:

    c = x.read()

    c_rsa = Crypto.PublicKey.RSA.importKey(c)

    signer = Crypto.Signature.PKCS1_v1_5.new(c_rsa)

    msg_hash = Crypto.Hash.SHA256.new()

    msg_hash.update(y)

    sign = signer.sign(msg_hash) # 使用私钥进行'sha256'签名

    with open("d.pem", "rb") as x:

    d = x.read()

    d_rsa = Crypto.PublicKey.RSA.importKey(d)

    verifer = Crypto.Signature.PKCS1_v1_5.new(d_rsa)

    msg_hash = Crypto.Hash.SHA256.new()

    msg_hash.update(y)

    verify = verifer.verify(msg_hash, sign) # 使用公钥验证签名

    print(verify)

    运行结果:

    True

    使用 rsa 模块:

    import rsa

    y = b"abcdefg1234567"

    with open("e.pem", "rb") as x:

    e = x.read()

    e = rsa.PrivateKey.load_pkcs1(e) # load 私钥

    with open("f.pem", "rb") as x:

    f = x.read()

    f = rsa.PublicKey.load_pkcs1(f) # load 公钥,由于之前生成的私钥缺少'RSA'字段,故无法 load

    cipher_text = rsa.encrypt(y, f) # 使用公钥加密

    text = rsa.decrypt(cipher_text, e) # 使用私钥解密

    assert text == y # 断言验证

    sign = rsa.sign(y, e, "SHA-256") # 使用私钥进行'sha256'签名

    verify = rsa.verify(y, sign, f) # 使用公钥验证签名

    print(verify)

    运行结果:

    True

    PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

    在线RSA加密/解密工具:http://tools.ddpool.cn/password/rsa_encode

    文字在线加密解密工具(包含AES、DES、RC4等):http://tools.ddpool.cn/password/txt_encode

    MD5在线加密工具:http://tools.ddpool.cn/password/CreateMD5Password

    在线散列/哈希算法加密工具:http://tools.ddpool.cn/password/hash_encrypt

    在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://tools.ddpool.cn/password/hash_md5_sha

    在线sha1/sha224/sha256/sha384/sha512加密工具:http://tools.ddpool.cn/password/sha_encode

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • 主要介绍了python实现的AES双向对称加密解密与用法,简单分析了AES加密解密算法的基本概念并结合实例形式给出了AES加密解密算法的相关实现技巧与使用注意事项,需要的朋友可以参考下
  • 一,简介对称加密: 加密和解密的秘钥使用的是同一个.非对称加密: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。对称加密算法:密钥较短,破译困难,除了数据加密...
  • 一,简介对称加密: 加密和解密的秘钥使用的是同一个.非对称加密: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。对称加密算法:密钥较短,破译困难,除了数据加密...
  • 这里写自定义目录标题常用的对称加密算法简介经典的对称区块加密模式现代的对称区块加密模式使用示例安装依赖库示例以经典的CBC模式为例以现代的OCB模式为例可能问题 常用的对称加密算法简介 有时需要对数据进行对称...
  • Python使用rsa模块实现非对称加密解密1、简单介绍:RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK...
  • 1公私钥关系非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即...
  • python AES 双向对称加密解密

    千次阅读 2017-10-10 21:48:56
    高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,...
  • 这篇文章主要介绍了Python如何基于rsa模块实现非对称加密解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、简单介绍:RSA加密算法是一种非对称加密算法 ...
  • 高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,...
  • python实现RSA 非对称加密解密

    千次阅读 2019-04-28 17:36:55
    rsa是一种非常常见的非对称加密算法,rsa算法用到了一个公式: 谜文=明文EmodN 谜文=明文^E modN 谜文=明文EmodN 对明文进行E次方运算,再对N取模操作得到谜文.相信到这里读者的疑问都是E和N到底是什么?其实这里的...
  • 把第二步骤返回的经过rsa加密的字符串作为参数输入 # rsa私钥解密 def decrypt(crypto): crypto = base64.b64decode(crypto) with open(rsa私钥文件, 'r') as f: privkey = rsa.PrivateKey.load_pkcs1(f....
  • 一、对称加密 二、AES 三、Python 密码库——Cryptodome 四、用python实现文件加密 from Cryptodome.Cipher import AES import operator # 导入 operator,用于比较原始数据与加解密后的数据 AES_BLOCK_SIZE = AES....
  • https://stackoverflow.com/questions/54176838/encrypt-text-in-php-and-decrypt-in-python php加密 function encrypt($data,$key) { //$key必须为32位字符串 $cipher = "AES-256-ECB"; if (in_array($cipher...
  • 加密技术分为两类:对称加密 如 AES非对称加密 如 RSA关于加密的文章我以后会专门写一篇文章,现在让我们简单的看看RSA的基本概念及在Python中如何使用。概念A 和 B 要把他们的通信内容加密, 如果A/B使用相同的加密...
  • https://my.oschina.net/leejun2005/blog/586451手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓了两下 pyDes 貌似很方便,不过据网上其他同学测试说PyCrypto 性能要比 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 386
精华内容 154
关键字:

对称加密解密python

python 订阅