1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python rsa加密解密_RSA加密解密(python版)

python rsa加密解密_RSA加密解密(python版)

时间:2023-07-16 15:10:31

相关推荐

python rsa加密解密_RSA加密解密(python版)

RSA的算法涉及三个参数,n、e、d。

其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质;再选择d,要求(d*e1)mod((p-1)*(q-1))=1。

(n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。[1]

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^d mod n;B=A^e mod n;(公钥加密体制中,一般用公钥加密,私钥解密)

e和d可以互换使用,即:

A=B^d mod n;B=A^e mod n;

#!/usr/bin/env python

#coding -*- utf:8 -*-

import math

import random

#生成素数数组

def prime_array():

arraya = []

for i in range(2,100): #生成前100中的素数,从2开始因为2是最小的素数

x = prime(i,2) #i为素数是返回True,则将x加入arraya数组中;2为测试值

if x:

arraya.append(i)

return arraya

#判断是否为素数

def prime(n, test_divisor):

if math.sqrt(n) < test_divisor:

return True #为素数时返回True

if n % test_divisor == 0:

return False #不为素数时返回Fasle

else:

return prime(n, test_divisor+1)

#找出与(p-1)*(q-1)互质的数e

def co_prime(s):

while True:

e = random.choice(range(100))

x = gcd(e,s)

if x==1: #如果最大公约数为1,则退出循环返回e

break

return e

#求两个数的最大公约数

def gcd(a,b):

if b==0:

return a

else:

return gcd(b, a%b)

#根据e*d mod s = 1,找出d

def find_d(e,s):

for d in range(100000000): #随机太难找,就按顺序找到d,range里的数字随意

x = (e*d) % s

if x==1:

return d

#生成公钥和私钥

def main():

a= prime_array()

print("前100个素数:",a)

p = random.choice(a)

q = random.choice(a)

print("随机生成两个素数p和q. p=",p," q=",q)

n = p * q

s = (p-1)*(q-1)

#print("The p is ", p)

#print("The q is ", q)

#print("The n(p*q) is ",n)

e = co_prime(s)

print("根据e和(p-1)*(q-1))互质得到: e=", e)

d = find_d(e,s)

print("根据(e*d) 模 ((p-1)*(q-1)) 等于 1 得到 d=", d)

print("公钥: n=",n," e=",e)

print("私钥: n=",n," d=",d)

pbvk=(n,e,d)

return pbvk

#生成public key公钥或private key私钥

#zx==0 公钥 zx==1 私钥

#a为元组(n,e,d)

def generate_pbk_pvk(a,zx):

pbk = (a[0],a[1]) #public key公钥 元组类型,不能被修改

pvk = (a[0],a[2]) #private key私钥

#print("公钥: n=",pbk[0]," e=",pbk[1])

#print("私钥: n=",pvk[0]," d=",pvk[1])

if zx==0:

return pbk

if zx==1:

return pvk

#加密

def encryption(mw, ned):

# 密文B = 明文A的e次方 模 n, ned为公钥

#mw就是明文A,ned【1】是e, ned【0】是n

B = pow(mw,ned[1]) % ned[0]

return B

#解密

def decode(mw, ned):

# 明文C = 密文B的d次方 模 n, ned为私钥匙

#mw就是密文B, ned【1】是e,ned【1】是d

C = pow(mw,ned[1]) % ned[0]

return C

if __name__=='__main__':

pbvk = main()

pbk = generate_pbk_pvk(pbvk, 0) #公钥 if 0 return pbk if 1 return pvk

A = int(input("请输入明文: "))

print("加密中....")

B = encryption(A,pbk) #加密

print("生成的密文是: ", B)

pvk = generate_pbk_pvk(pbvk, 1) #私钥

print("解密中....")

C = decode(B,pvk) #解密

print("解密后的明文是: ", C)

if A==C:

print("加密前的明文和解密后的明文一样,成功!!!")

python rsa 加密解密 (编解码,base64编解码)

最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...

python下RSA加密解密以及跨平台问题

Reference: /luchanghong/archive//07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...

python RSA加密解密及模拟登录cnblog

1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...

Cryptopp iOS 使用 RSA加密解密和签名验证签名

Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网: 以下主要演示Cryptopp 在iOS上的RSA加密解密签名与验证 ...

使用RSA加密在Python中逆向shell

i春秋翻译小组-Neo(李皓伟) 使用RSA加密在Python中逆向shell 这是一个关于使用RSA加密编程逆向shell的python教程. 我想提一下,这篇文章更多的是关于理解shell中涉及的 ...

兼容javascript和C&num;的RSA加密解密算法,对web提交的数据进行加密传输

Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

iOS使用Security&period;framework进行RSA 加密解密签名和验证签名

iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

openssl evp RSA 加密解密

openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...

C&num; 与JAVA 的RSA 加密解密交互,互通,C&num;使用BouncyCastle来实现私钥加密,公钥解密的方法

因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...

C&num; Java间进行RSA加密解密交互

原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...

随机推荐

Metaio获取当前追踪的对象的方法

重写 onTrackingEvent获取TrackingValues集合,然后通过TrackingValues的state属性的isTrackingState()方法判断是否为追踪状态,或者直接使用s ...

Linux vi 中移动光标 命令

移动光标 上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行下:j nj:向下移动n行左:h nh:向左移动n列右:l nl:向右移动n列 w:光标以单词向前移动 nw:光标向 ...

IE9下Coolite&period;Ext出现createContextualFragment错误

解决Ext在IE9上报错“createContextualFragment”,只需要在使用Coolite.Ext页面加入如下代码即可: if ((typeof Range !== "unde ...

为什么使用spring Struts 等框架开发

转载自:/sharpxiajun/p/3936268.html 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入, ...

「OC」 多态

一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...

vue组件里定时器销毁问题

我在a页面写一个定时,让他每秒钟打印一个1,然后跳转到b页面,此时可以看到,定时器依然在执行.这样是非常消耗性能的.如下图所示: 解决方法1: 首先我在data函数里面进行定义定时器名称: data( ...

python操作注册表

#注册表操作 # -*- coding: utf-8 -*- import win32api import win32con #打开注册表:传主键化值,子键值,操作方法(win32con.KEY_AL ...

js如何在浏览器添加cookie(添加、获取、删除)

首先,简单用js将cookie保存到浏览器中,具体可按F12在这里查看(火狐浏览器) 1.js脚本方法 1)添加cookie方法 //添加cookie var addCookie = function ...

4&period;7 Sublime Text3 中配置 Python环境 --之上安装Sublime 3

返回总目录 目录: 1.展示效果: 2.缺优分析: 3.下载Sublime Text3 (一)展示效果: 1.能够交互式编写Python代码: 2.可以编写文件式Python代码: 3.能够自动补齐代 ...

solus下 修改 crate-react-app 的默认下载依赖方式为 yarn

vim/usr/local/share/.config/yarn/global/node_modules/create-react-app/createReactApp.js 或者是修改 /usr ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。