一. 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 ...