首页 > 编程知识 正文

rsa算法java实现,java rsa加密解密

时间:2023-05-04 13:22:03 阅读:50866 作者:4120

一. RSA算法

1 .密钥生成

随机生成两个大素数p、q

计算n=p*q

计算n的欧拉函数f=(p-1 ) * (q-1 )

选择1

计算d,ed=1modf

公钥为(e,n ),私钥为(d,n )

2 .加密

c=m^e mod n

3 .解密

m=c^e mod n

二、BigInteger类(大数) ) ) )。

定义:

bigintegerb=newbiginteger('1);

将其他类型的变量转换为BigInteger变量

bigintegerb=big integer.value of (1;

随机生成大素数

bigintegerbiginteger=big integer.probable prime (2048,r ); 随机生成2048位大素数,r是Random变量

来历检查(不小心的可乐检查)。

Booleana=b.isprobableprime(256; //b为素数的概率为1 - 1/2^256

四则运算

BigInteger a、b、c;

c=a.add(b ); //正

c=a.subtract(b; //负

c=a .多点(b ); //乘坐

c=a.divide(b; //除外

最大公式因子

BigInteger a、b、c;

c=a.gcd(b;

留出富馀

BigInteger a、b、c;

c=a.remainder(b );

幂模式(a^b mod m ) ) ) ) ) ) ) ) ) )。

BigInteger a、b、c;

c=a.modpow(b,m );

三.算法实现

1 .两个大素数的生成

构建Big类,随机生成大素数,进行素数判断

2 .公钥生成

寻找f和素的公钥e(1)

3 .私钥生成

用pgddxs算法(换相除法)、列表计算e模式f的逆d

4 .获取密钥

在Keys类中将公钥、私钥输出到文件中

5 .加密

(1)从文件中逐行读取明文、公钥

)2) getByte ) )将明文转换为byte数组

)3)依次计算c=m^e mod n

)4)将结果逐行输出到文件

6 .解密

(1)从文件中逐行读取密文、私钥

)2)一边读取密文一边计算m=c^d mod n,并将其容纳在byte数组中

)3)将byte数组返回字符串(明文)

)4)将明文输出到文件

四.遇到的问题和解决方法

问题1 :我不知道如何在加密时将明文转换为可用于加密的数字

解决方案1 :虽然烦恼了很久,但我觉得读书时看到的getByte )方法可以将字符串转换为byte数组

问2 )解密时,发生了以下问题

解决方案2 :此错误还无法调试。 检查了很久,当自己计算公钥e时,发现类型是n。 修正型f后,解决了这个问题

Q3 )之后,解密的文件仍然有问题

解决方案3 :调试后,发现自己犯了一个愚蠢的错误。 我把int i=0放入了while循环。 每次循环都把I放进1 .

q4 )而且,输出有问题。 后面会增加空间

解决方案4 :添加长度与明文长度相同的byte数组

成功~~~

五.码云链接

算法注释--java的BigInteger类和BigDecimal类

引线包:import java.math.*; BigInteger类:可以使用构造方法: publicbiginteger (字符串val )或valueof (如: BigIn )函数.

java基础-介绍-BigInteger类的常用方法

p>

java基础-BigInteger类常用方法介绍 作者:ygdbmh 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...

Java学习——BigInteger类和BigDecimal类

Java学习——BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.c ...

AES算法,DES算法,RSA算法JAVA实现

1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

Java API —— BigInteger类

1.BigInteger类概述        可以让超过Integer范围内的数据进行运算 2.构造方法     public BigInteger(String val) 3.BigInteger类 ...

解析java.math.BigInteger类——构造函数

最早由于做作业,结识了java的BigInrger类.读着读着,越来越觉得有趣.后来作业做完,也不忍丢下它,索性把全部代码研究一遍. 开始的时候,一个上午时间最多读懂2个方法.但是还是有滋有味的坚持了 ...

【搬运】Tea算法Java实现工具类

最近在做数据加密,目标是实现平台app的数据安全性,所以准备使用AES+Base64进行加密,适逢一个特长的json串AES加密不了,于是在谷歌了各种算法,判断是否合用,参见 各种加密算法比较 一文中 ...

RSA算法 Android JAVA C#互通

RSA算法属非对称加密算法,在实际使用中,往往客户端使用公钥进行加密传递敏感数据,服务端server使用私钥进行解密,这样防止中间人从网络获取敏感数据的明文. Android端主要代码如下: pack ...

重复造轮子之RSA算法(一) 大素数生成

出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...

随机推荐

centos 7.2 安装PHP7.1+apache2.4.23

安装准备:   http://ftp.cuhk.edu.hk/pub/packages/apache.org//httpd/httpd-2.4.23.tar.gz 下载apache http://cn ...

luogg_java学习_08_设计模式_API

这篇博客总结了1天整,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 设计模式 在长期开发过程中,为了解决某些固定问题, 总结出的 ...

Activity调用静态方法改变UI,使用Handler来改变UI显示

本人菜鸟,请各位多多指点,不足之处,请斧正.没啥技术含量,就权当丰富下mono for android的小代码. Activity调用静态方法改变UI using System; using Andr ...

第8章 用户模式下的线程同步(3)_Slim读写锁(SRWLock)

8.5 Slim读/写锁(SRWLock)——轻量级的读写锁 (1)SRWLock锁的目的 ①允许读者线程同一时刻访问共享资源(因为不存在破坏数据的风险) ②写者线程应独占资源的访问权,任何其他线程( ...

Java Hour 16 来个CURD吧!

有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 突然想到我最近一直在追的小说,作者每天都会更新两章,而且质量挺高.所以从这篇开 ...

C语言中的fread和fwrite

C语言中的fread和fwrite是专门用来操作文件的方法. 1. fread负责从打开的文件指针中读取文件内容. 函数原型:size_t fread(void *p, size_t size, si ...

一、UITableView的属性

一.UITableView的属性 NSIndexPath类型是用来获取用户选择的indexPath,在别的函数里面,若需要知道用户选择了哪个cell,用上它可以省事很多.不必再去建全局变量sectio ...

Android之旅十八 百度地图环境搭建

在android中使用百度地图,我们能够先看看百度地图对应的SDK信息:http://developer.baidu.com/map/index.php? title=androidsdk,它里面基本 ...

hdu 3032 Nim or not Nim? (sg函数打表找规律)

题意:有N堆石子,每堆有s[i]个,谦让的唇膏和Bob两人轮流取石子,可以从一堆中取任意多的石子,也可以把一堆石子分成两小堆 谦让的唇膏先取,问谁能获胜 思路:首先观察这道题的数据范围  1 ≤ N ...

加密解密DES之Android、IOS、C#实现

Android实现 package com.sto.express.utils; import java.security.MessageDigest; import java.security.sp ...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。