Python中rsa模块【sign 加签验签】的使用

安装

pip install rsa

使用一

说明:简单入门使用  使用公钥加密  ----------->> 使用私钥进行解密

 1 # -*- coding:utf-8 -*-
 2 import rsa
 3
 4
 5 def rsa_encrypt(d_str):
 6     """
 7     生成私钥 和公钥  并接受字符串进行加密
 8     :param d_str: 字符串
 9     :return: 返回加密结果及私钥
10     """
11     # 生成公钥和私钥
12     pubkey, privkey = rsa.newkeys(1024)
13     print pubkey, privkey
14     # 将字符串进行编码
15     content = d_str.encode(‘utf-8‘)
16     print ‘编码结果‘, content
17     # 公钥加密
18     crypto = rsa.encrypt(content, pubkey)
19     print ‘共钥加密结果‘, crypto
20     return crypto, privkey
21
22
23 def rsa_decrypt(crypto, privkey):
24     """
25     解密
26     :param crypto: 公钥加密结果
27     :param privkey: 私钥
28     :return:
29     """
30     # 解密
31     content = rsa.decrypt(crypto, privkey)
32     # 解码
33     content = content.decode(‘utf-8‘)
34     print ‘解密结果‘, content
35
36
37 if __name__ == ‘__main__‘:
38     a = rsa_encrypt(‘hello word‘)
39     rsa_decrypt(*a)

简单使用 公钥加密私钥解密Code

结果:

PublicKey(105532334855064558871471720144983044056346299365013755733259162501036790378738292019787069868554583994384472397785833870986231336954271316146541465051193038944174617155568148589694230338201718581390254372179722652044582086652863100420287539790025384495993582784568995192512904611505241844854221386155178376113, 65537) PrivateKey(105532334855064558871471720144983044056346299365013755733259162501036790378738292019787069868554583994384472397785833870986231336954271316146541465051193038944174617155568148589694230338201718581390254372179722652044582086652863100420287539790025384495993582784568995192512904611505241844854221386155178376113, 65537, 32731979959395414623501314606818596159930287123192007763400201354327705540818366142579180756185193537297300310203284329394649196427506188005412934223077799695642743507581779745970378384356510585976227244879763737251234324886626484049295170834651908035814868260255049993619457806756461841448318943841949636241, 43780083196928464550236946271732349312696781271723999154597463198120984522796589514105513242991062844313154180440124214418698597690847985597548059444175830087891717, 2410510148652904484317488108869831498999998903827157164423624876033568004965365613594737139603959496839915382306483478406548824172663536589804989)
编码结果 hello word
共钥加密结果 (???????ztJc3?d? ]@?d?/[email protected]??????B?C??[email protected]?0-???7=???teKH??u???ZJ???g??c?R??uAK??k=M9??=??‘??5:lt??F?f?,q?T?-?>[email protected]
解密结果 hello word

使用二

说明:可以直接生成公钥私钥并进行pkcs格式转换

# -*- coding:utf-8 -*-
import rsa
import base64

def generate_pubkey_privkey():
    """
    生成公钥和私钥
    :return:
    """
    public_key, private_key = rsa.newkeys(1024)  # 创建

    print ‘公钥:‘,
    pub_pkcs = public_key.save_pkcs1()
    print pub_pkcs
    print ‘私钥:‘,
    priv_pkcs = private_key.save_pkcs1()
    print priv_pkcs

    # 假设以上得到的公钥及私钥 以下演示加密解密过程

    mess = ‘hello word‘
    print ‘加密前数据‘, mess

    # 加载公钥私钥
    public_key = rsa.PublicKey.load_pkcs1(pub_pkcs)
    private_key = rsa.PrivateKey.load_pkcs1(priv_pkcs)
    print ‘加载到的公钥‘,
    print public_key
    print ‘加载到的私钥‘,
    print private_key

    result = rsa.encrypt(mess, public_key)
    print ‘加密结果‘,
    content = base64.encodestring(result)
    print content

    result = rsa.decrypt(base64.decodestring(content), private_key)
    print ‘解密结果‘,
    print result

if __name__ == ‘__main__‘:
    generate_pubkey_privkey()

直接生成公钥私钥加密解密案例Code

结果:

公钥: -----BEGIN RSA PUBLIC KEY-----
MIGJAoGBALti7dL+esfzMi6Z123+tZ/RkyznU7ugsrkLZuoyN+QOggU5pYsXH7bY
deF7mQySmW5iMSuBpbBbpRxJ319J5UTKceLaO/L6ov3+eIovwlIHnGX5pd8QzlSV
3RUEWy8cwYistgDNBvDEa79pJRXlH/1O5W+lvzgNoHWH+/fmcgitAgMBAAE=
-----END RSA PUBLIC KEY-----

私钥: -----BEGIN RSA PRIVATE KEY-----
MIICYQIBAAKBgQC7Yu3S/nrH8zIumddt/rWf0ZMs51O7oLK5C2bqMjfkDoIFOaWL
Fx+22HXhe5kMkpluYjErgaWwW6UcSd9fSeVEynHi2jvy+qL9/niKL8JSB5xl+aXf
EM5Uld0VBFsvHMGIrLYAzQbwxGu/aSUV5R/9TuVvpb84DaB1h/v35nIIrQIDAQAB
AoGBAK+Gurmy0LYtc2s9hhOtzNnYyWD9i2ys2d0F9jAYPExu3pIgbpX8YiO3XayK
R1IEnJ5OcjqLpfWt0trNwzNeLBBm0pwkBipJvhB9PUXvebrSaSQ9XLTHOyCvtgZA
rIUkvA06MwVD2UTvzxZgRDWwsQzaodPmIjMwvL0KbmhFqxoBAkUAvKO8KmCvqq7D
Ou0ncJyBjPNznyD3ULAD5JugOW/s/MufX5ze+ovcJ/3+3zWJjsAmsRamyVFxFxxQ
ci+nIYj6iQl9EYECPQD+TKOORE/64zX6gtO++Qdba1Bt3Q0uV58Pqgvr1oqjQx06
P6Z2G6DydYRDT2wn8VWtRO9xYgLek4F2dS0CRDg53YYMF5AaUxqnQVAxdfPbRKUz
oEOukxp6wIEeOVcIIlLPYS7wrQhGjsddH8kqwN2b0M7EtZ6b0+aVCY3XVEWwTFUB
Aj0AtfHLi7ygpNbwBf6Y1aiDdQtBDnn8Nk4GxkRaJzDnHIymWsizpwl5jEA8k5Q9
xA5NyJzr3GnNt8Y9+K05AkREFRpGMu71EZSDk7xlR6uGB5VSvqwLtdbP+6iabD22
btvhDbppOphVnEQ88tDh/1lllBMv/CEBrsyj7ZDN97faRRguIQ==
-----END RSA PRIVATE KEY-----

加密前数据 hello word
加载到的公钥 PublicKey(131587234096741920779175642912883844559666214692610055570867202760447720434104757662756227268149385880941310691539830771748383700645819307242895140430520957795475529716183046516129032552194937247719617787028990120331064744900637723993694355860352548744617464179308616135644675215125455378152511253328774170797, 65537)
加载到的私钥 PrivateKey(131587234096741920779175642912883844559666214692610055570867202760447720434104757662756227268149385880941310691539830771748383700645819307242895140430520957795475529716183046516129032552194937247719617787028990120331064744900637723993694355860352548744617464179308616135644675215125455378152511253328774170797, 65537, 123258750232157251243004921537132098412703499607315542387353200638740331564295847660999771667369923094513116591283376890105765094510676433958437022917270147537132887314867013151363553679791541930382779949512171824652676794193139573303520889566550757298978628386029678563821858198700170484444076794153827768833, 42433662666258863461978927611251897319389836041413838112011034385202248177081665970527935082090355234493146174781377648518029689179287762497596881845967337929118081, 3101010514498281571972365602515998884303887562860511295373719676102937811331469329282673274291582789827470545355335918023460154317717884842177837)
加密结果 fbMjnlbTtWzK+rnQ+Fvx/Z8F7u+3bu5oXBMBG0fNOQ93jpE755Ir+EIeXvE/Rkg57y8VRobkFMDh
OTHVfj1RZ2ZLlKj8Uphy1dA40Hr1AHZ4shjGxwlWivNMtfiAs6ksD0jLhABlwapTf6jl9mkSZw9W
7Kah+3ca/XMYNVKXNtU=

解密结果 hello word

结果Code

使用三

说明:加签 验签  眼签失败会抛出异常

 1 # -*- coding:utf-8 -*-
 2 import rsa
 3
 4 def jia_qian_demo():
 5     """
 6     加签验签
 7     :return:
 8     """
 9     public_key, private_key = rsa.newkeys(1024)  # 创建
10
11     print ‘公钥:‘,
12     pub_pkcs = public_key.save_pkcs1()
13     print pub_pkcs
14     print ‘私钥:‘,
15     priv_pkcs = private_key.save_pkcs1()
16     print priv_pkcs
17
18     # 假设以上得到的公钥及私钥 一下演示加签验签
19
20     mess = ‘hello word‘
21     print ‘加密前数据‘, mess
22
23     # 加载公钥私钥
24     public_key = rsa.PublicKey.load_pkcs1(pub_pkcs)
25     private_key = rsa.PrivateKey.load_pkcs1(priv_pkcs)
26     print ‘加载到的公钥‘,
27     print public_key
28     print ‘加载到的私钥‘,
29     print private_key
30
31     mess = ‘重要信息不可泄露‘
32     result = rsa.sign(mess, private_key, ‘SHA-1‘)
33     print ‘加签结果‘,
34     print result
35
36     result = rsa.verify(mess, result, public_key)  # 验签失败抛出异常
37     print ‘验签结果‘,
38     print result
39
40 if __name__ == ‘__main__‘:
41     jia_qian_demo()

加签 验签 案例Code

结果:

公钥: -----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJVqkDkYlOgAY/y8bv/cCtxbob/mPFcF6JtiVuMObVR1hlYTiKiL2RTe
yJLX5d2bGnhU3B59leVZ+oNcjuVS62MB9g+2riTiGN/x1DXeZjs2sEZO5VrFoBF2
U3lNPqRjsgzoFTVqcfUFr4O4IVC0qQiq0E/K6ArEMyB4hrlT9lqlAgMBAAE=
-----END RSA PUBLIC KEY-----

私钥: -----BEGIN RSA PRIVATE KEY-----
MIICYAIBAAKBgQCVapA5GJToAGP8vG7/3ArcW6G/5jxXBeibYlbjDm1UdYZWE4io
i9kU3siS1+Xdmxp4VNwefZXlWfqDXI7lUutjAfYPtq4k4hjf8dQ13mY7NrBGTuVa
xaARdlN5TT6kY7IM6BU1anH1Ba+DuCFQtKkIqtBPyugKxDMgeIa5U/ZapQIDAQAB
AoGARX4vn+6X6yOrXXQCqEueXYjcvRUHQW5FFmfxg19FaD/VABnLuKB6kaNgZDO3
/I7UC91kF2ZPnkFwK0KT70nn39Pyq+CQgc5ycE3ehjStJ9j6Eh38wNg6eIbzFGld
PhhOG5TGYTL12iI9AAReeMONXqYSCLq8l6oOzNEU3dN+Hs0CRQDO4kzfVbEXyc8s
I3/q4N1zaMJhhalTYsAUA9fW2FYNT2PFYxe4yXzc5EEeljx/L3QhMrrMV+IaPmAJ
PSnHzI+/x5g+KwI9ALjjkmSpLFp5+AjqZTaG0HCBNj5xPzsh3Hb5MXbyKIoaE8Im
lUjA4STfvJpFvDPAe1P9VuiADdqc/e0ybwJFAKw95qhuLKHUiCKEb8R6cITcbDFL
Wd0tsyM2y+V4ebRdK4Cz7pUPU2CIvNqdVELDnFjjZngolvsogUZP4NAStH+DynG/
AjwHGc5kiU7Hxsls5juu5WyZ9Yx0x3qrNbi25QkuTUybSTcbDMpM+gNrnCAtOKJq
xmi2KBOvaEOf8smZ04cCRDlsLqgJIjnOaiIKuKNiuYzEwYYgnQzRq4AP2rjCJG5q
ajyZSt1/6luiDN7RWCrusWtg3ashNTup1a6iYPLLpC6kc2F2
-----END RSA PRIVATE KEY-----

加密前数据 hello word
加载到的公钥 PublicKey(104923668177873610990710907595183022805319572154432933078574572974445308631826501249509331300185591353458547387639051456660698908681522353691041084812802642434220757729988444016144209396196921306050572227488695529623771584475563512960431878688822219498805751310959855252308213627500243245698594546289080687269, 65537)
加载到的私钥 PrivateKey(104923668177873610990710907595183022805319572154432933078574572974445308631826501249509331300185591353458547387639051456660698908681522353691041084812802642434220757729988444016144209396196921306050572227488695529623771584475563512960431878688822219498805751310959855252308213627500243245698594546289080687269, 65537, 48799583895048072640002733942792219938797105128999957782138815613074560208839336322783983511008392359198162609253184116613130955575041318077675540346134218507517161135334820935121227098159884944307100507857502687571800965611813875228035483634650919449141145666388314983843157846173454492436304190436299120333, 46537660807247476482343721332274423831646783587173026364563572911971952373945006999573837431392498419891616222098787387296980240166205914045002026387442240251772459, 2254596951326214329380524374466508855609079749515632320185208485662792835416443211707235676947903051873284825862592851258869281666513890246996591)
加签结果 [iěu??&T??Q$y????p?]\?nr????(???g:@??bH??

  

原文地址:https://www.cnblogs.com/kayb/p/8157556.html

时间: 2024-10-12 04:50:45

Python中rsa模块【sign 加签验签】的使用的相关文章

Java实现RSA密钥对并在加解密、加签验签中应用的实例

一.项目结构 二.代码具体实现 1.密钥对生成的两种方式:一种生成公钥私文件,一种生成公钥私串 KeyPairGenUtil.java package com.wangjinxiang.genkey.util; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security

RSA加密解密及RSA加签验签

RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解密并查看数据:加签验签是私钥加签公钥验签,持有私钥(一人持有)可以加签,持有公钥(多人持有)可以验签. 在金融行业在设计到数据交互传输的时候,需要考虑数据的安全性问题.下文通过介绍RSA的加密和加签两个特性,说明RSA加密技术在保障数据传输过程中的安全性以及实现数据的防篡改和防否机制的应用场景及代码

RSA体系 c++/java相互进行加签验签--转

在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java对客户端的签名进行验签操作.这就涉及到c++ openssl和java之间交互加签验签对客户端身份进行验证的过程. 如果你通过搜索查到我这边文章,相信你一定发现,采用openssl加签后的 数据,在java端却验签不成功,使用openssl验签可以通过.问题在于openssl的公钥发在服务端转换成j

对加签验签的理解

前言 加签验签模块早已做完了,从刚开始的一脸懵逼,到上线,前前后后两周多吧,现在整理一下思路,记录一下. 什么是加签验签 加签验签,发送消息方,对消息加签名:接受消息方,验证签名是否正确. 为什么要做加签验签 做加签验签的目的主要目的就是,验证消息的完整性 如何做加签验签 简单来说, 发送消息方: 1.根据消息内容形成摘要 2.根据摘要形成签名字段 3.发送消息 接受消息方: 1.接受消息 2.根据消息内容形成摘要 3.根据摘要去验证签名是否正确 详细思路 上面讲的很粗略,这里我们从整个过程来讲

.NET RSA解密、签名、验签

using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; namespace API.Tools { /// <summary> /// 类名:RSAFromPkcs8 /// 功能:RSA解密.签名.验签 /

Python中logging模块的基本用法

在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 怎样进行日志记录相关配置 日志记录使用常见误区 下面我们来梳理一下整个演讲的过程,其实其核心就是介绍了 logging 模块的使用方法和一些配置. 日志记录的重要性 在开发过程中,如果程序运行出现了问题,我们是可以使用我们自己的 Debug 工具来检测到到底是哪一步出现了问题,如果出现了问题的话,

基于注解的 java 加签验签框架 checksum

checksum 基于 java 注解生成加签验签 checksum. 开源地址:github checksum 创作缘由 原来的代码中,checksum 的生成是用的工具类方法. 后来发现如下的问题: 有些字段太大,不想参与验签,但是无法方便的调整. 不同系统的 checksum 字段不同,只好把工具方法 copy 过去,改来改去. 感觉这样有很大的弊端,完全失去了灵活性. 特性 基于注解的 checksum 加签验签 Fluent 流式语法 支持灵活的策略自定义 更新记录 更新记录 快速开始

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

Python使用rsa模块实现非对称加密与解密 1.简单介绍: RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制.加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的. RSA密钥至少为500位长,一般推荐使用1024位.RSA密钥长度随着保密级别提高,增加很快. 由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序就会抛出异常. --来自大佬 2.代码实现: 来一段大佬的代码

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST