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:  http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...

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

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

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

Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网:https://www.cryptopp.com 以下主要演示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 等框架开发

转载自:http://www.cnblogs.com/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 ...

python rsa加密解密_RSA加密解密(python版)相关推荐

  1. java发送加密报文_RSA加密---从后台到客户端实现报文加解密

    RSA是当前最流行的非对称加密方式,使用公钥加密使用密钥解密,如何妥善的保管密钥就成了关键. 动态生成密钥 工具类 package com.yitong.utils; import java.secu ...

  2. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)

    本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...

  3. rsa java模数_RSA加密:利用模数和指数生成公钥加密

    引子 目前做一款金融产品,由于涉及到资金安全,采用动态公钥的方式,即客户端每次登录服务端返回一个不同的XML串,由公钥的模数和指数构成,我需要用这个串生成公钥加密相关信息. 服务端返回的XML串形如: ...

  4. Python RSA PKCS#1 转 PKCS#8

    Python RSA PKCS#1 转 PKCS#8 Python中使用RSA库生成公钥和私钥,只能以PKCS#1 DER或PEM格式保存公钥和私钥.但是我们有时候需要PKCS#8这种格式 impor ...

  5. java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  6. python加密解密库openssl_OpenSSL和Python实现RSA Key公钥加密私钥解密

    基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...

  7. python RSA加密、解密、签名

    python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是为了保证传输内容隐私,签名是为了保证消 ...

  8. python实现非对称加密算法_Python使用rsa模块实现非对称加密与解密

    Python使用rsa模块实现非对称加密与解密 1.简单介绍: RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制.加密密钥(即公开密钥)PK是公 ...

  9. Python | Python 实现RSA加解密 验签 无 长度限制 加密解密, 分段加密

    系列文章目录 Python | Flask 解决跨域问题 文章目录 系列文章目录 为什么要分段加密 代码示例 测试 测试结果 为什么要分段加密 加密的字段长短规则如下: 加密的 plaintext 最 ...

最新文章

  1. 判断设备网络状态_生成树RSTP,快速生成树协议,交换网络必用的破环协议,面试必备...
  2. 牛顿棺材板快盖不住了:用深度神经网络解决三体问题,提速一亿倍
  3. HDU 4831 Scenic Popularity 暴力模拟
  4. python networkx进行最短路径分析_NetworkX vs Scipy所有最短路径算法
  5. Knockoutjs Component问题汇总
  6. 《零基础看得懂的C++入门教程 》——(2)什么是数据类型、变量?一看便会
  7. 学生用计算机中sto,STO 文件扩展名: 它是什么以及如何打开它?
  8. Java JUC工具类--CyclicBarrier
  9. VISTA三步共享文件夹
  10. RouterOS 动态IP接入上网设置教程(超详细)
  11. 时间序列分析实验报告总结_时间序列分析实验报告
  12. stm32 PWM波
  13. Cocos Creator 国旗头像生成器,源码奉上!
  14. 自己的IP地址可以被随便查到吗?
  15. 微信退还钱什么时候到账?
  16. Mht制作word模板
  17. CLCL和ClipX:最实用的剪贴板增强工具,免费超小
  18. CSS 3种渐变效果(线性渐变,径向渐变,圆锥型渐变)
  19. Ubuntu18.04安装wps office
  20. 冷链物流计算机控制技术,芜湖WCS仓库控制系统

热门文章

  1. leetcode 545. Boundary of Binary Tree
  2. CARLA 学习笔记1:CARLA简介
  3. 国有企业数字化转型建设方法论
  4. 再一次感受爱的力量!
  5. 通达信指标公式编写常用函数(四)——EVERY、COUNT
  6. 【网络篇】第十七篇——IP协议详解
  7. GPIO 配置之ODR, BSRR, BRR 详解
  8. 第壹近场让天下没有难做的生意
  9. 使用Arthas快速定位SpringBoot接口超时问题的神器
  10. IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总: