RSA简单实现公钥私钥正确为何加密解密后不一致?

import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Date;

public class RSA {
private BigInteger p,q,n,d;
private BigInteger e=new BigInteger("65537");
private static BigInteger y;
private static BigInteger x;

    private void getPrime(int length){
        SecureRandom random=new SecureRandom();
        random.setSeed(new Date().getTime());
        while((p=BigInteger.probablePrime(length, random)).isProbablePrime(1)==false)
        {
            continue;
        }
        while((q=BigInteger.probablePrime(length, random)).isProbablePrime(1)==false)
        {
            continue;
        }
    }

    public static BigInteger e_gcd(BigInteger a,BigInteger b){
        if(b.intValue()==0){
            x=new BigInteger("1");
            y=new BigInteger("0");
            return a;
        }
        BigInteger ans=e_gcd(b, a.mod(b));
        BigInteger tmp=x;
        x=y;
        y=tmp.subtract(a.divide(b).multiply(y));

// System.out.println("tmp= "+tmp);
// System.out.println("gcd a="+a+" gcd b="+b+" gcd x="+x+" gcd y="+y);
// //System.out.println("gcd y="+y);
//

return ans;
}
BigInteger cald(BigInteger e,BigInteger n){
BigInteger gcd=e_gcd(e, n);
if(BigInteger.ONE.mod(gcd).intValue()!=0)
return new BigInteger("-1");
x.multiply(BigInteger.ONE.divide(gcd));
n=n.abs();
BigInteger ans=x.mod(n);
if(ans.compareTo(BigInteger.ZERO)<0)
ans.add(n);
return ans;
}

    public BigInteger getp(){
        return p;
    }
    public BigInteger getq(){
        return q;
    }
    public BigInteger getn(){
        return n;
    }
    public BigInteger gete(){
        return e;
    }
    public BigInteger getd(){
        return d;
    }

    public RSA(int length){
        getPrime(length/2);
        n=p.multiply(q);
        d=cald(e, n);
        //System.out.println("test : "+e.multiply(d).mod(n));
    }
    public RSA() {
        getPrime(128);
        n=p.multiply(q);
        //d=cald(e, n);
        BigInteger tmp=p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));

        d=e.modPow(tmp.subtract(BigInteger.ONE),n );
    }
public static void main(String[] args) {
    // TODO Auto-generated method stub

    RSA rsa=new RSA(20);
    System.out.println("P= " +rsa.getp());
    System.out.println("Q= " +rsa.getq());
    System.out.println("E= " +rsa.gete());
    System.out.println("N= " +rsa.getn());
    System.out.println("D= " +rsa.getd());
    BigInteger test=new BigInteger("100");
    System.out.println("test:"+rsa.gete().multiply(rsa.getd()).mod(rsa.getn()));
    BigInteger testc=test.modPow(rsa.getd(),rsa.getn());
    testc=testc.modPow(rsa.gete(),rsa.getn());
    boolean flag =testc.equals(test);
    System.out.println(flag);

}

}

代码如上,e*d=1(mod n)成立了,为何在加解密之后不一致呢??

0

1个回答

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Rsa 私钥加密 公钥解密
用于私钥加密 公钥解密用于私钥加密 公钥解密用于私钥加密 公钥解密
RSA公钥加密私钥解密实例
1、加密、解密流程 2、实现 (1)RSA加密工具类 RSACrypt.java package club.easyshare.framework.utils; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.KeyPair; import...
关于JAVA中RSA加签解签,私钥加密公钥解密和公钥加密私钥解密代码详解
在项目中遇到的问题百度了许久总结出来的 私钥加密公钥解密和公钥加密私钥解密。 一般为了安全采用的是私钥加密,公钥解密(公钥可以用Base64转换后公开) package com.paic.ebank.creditcard.common.util; import java.security.KeyFactory; import java.security.MessageDigest; im
openssl公钥加密私钥解密 &私钥加密公钥解密
// 其他可参考的: 1. http://blog.csdn.net/scape1989/article/details/18959657 2. http://blog.chinaunix.net/uid-23686726-id-3413979.html // 参考:http://hayageek.com/rsa-encryption-decryption-openssl-c/
RSA公钥私钥的简单实现
RSA算法是种能同时用于加密和数字签名的算法,也是被研究得最广泛的公钥算法。而公钥私钥的加密解密也会使一些小伙伴疑惑,这里稍微简单说一下,再简单地实现一下。 首先,公钥加密私钥可以解密。其次,私钥加密公钥可以解密。再深一步来说,公钥负责加密,私钥负责解密。私钥负责签名,公钥负责验证。公钥就是给大家用的,私钥就是给自己用的,必须小心保存。举个栗子,A想向B发送一条加密的信息,使用B的公钥加密,这样
RSA算法公钥私钥加解密C语言源码调试通过
RSA非对称加解密算法,目前主流的加密算法,采用大数库生成大素数,然后根据算法原理,进行大数运算;算法在生成大素数时候相对耗时,但是在加解密的时候速度比较快,目前本算法支持512-2048位的加解密算法,并测试通过,C++版本的也已经上传
java RSA公钥加密,私钥解密算法例子
[size=large][color=red]RSA算法原理[/color][/size] [url]http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html[/url] &quot;非对称加密算法&quot;。 [color=darkblue]  (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 ...
一看就懂的RSA公钥私钥加密解密,BASE64编码,针对于没了解过RSA的同学,很有帮助。
/* * 产生RSA公私钥对 */ public static KeyPair genRSAKeyPair() { KeyPairGenerator rsaKeyGen = null; KeyPair rsaKeyPair = null; try { System.out.println("Generati
RSA私钥加密公钥解密实现(python3)
一、环境说明 1.操作系统:Ubuntu Desktop 18.04; 2.python版本:python3.6; 3.加密模块:M2Crypto 二、M2Crypto安装 参见:https://blog.csdn.net/q13554515812/article/details/93611218 三、代码实现 # coding:utf-8 # Created:04/02/2019 # autho...
加密解密RSA+AES。(一)
数据加密技术的介绍及实践过程。 1.背景 1.1 数据加密 指利用密码技术信息进行加密,实现信息隐蔽,从而达到保证信息安全的目的。按照作用的不同,数据加密的技术分为数据传输加密技术,数据存储加密技术,数据完整性鉴别技术和密钥管理技术。 1.1.1数据传输加密技术: 有线路加密和端对端加密两种。 端对端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过...
Java 公钥和私钥加密解密代码
Java 公钥和私钥加密解密源码,写了注释可以直接运行,测试没有问题
RSA加密与解密,SHA1withRSA,生成公钥和私钥
import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.ArrayUtils; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.KeyPair; import java.se...
php rsa 加密、解密、签名、验签
php对接java rsa 签名、验签、加密、解密
.NET生成RSA公钥和私钥-加密解密示例
我们每一个人的一生中都会难免有缺憾和不如意,也许我们无力改变这个事实,而我们可以改变的只是看待这些事情的态度。用平和的态度去对待生活中的缺憾和苦难。Form1.cs代码: public partial class Form1 : Form { private const int RsaKeySize = 2048; private const string
RSA加密与解密(Java实现)
RSA的应用 RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密。 Base64编码 apache.commons-codex包提供了许多编码格式转换,例如Base64。 以下为Base64编码表 使用apache.commons-codex进行Base64对字符串进行编码与解码的程序如下: package com.qian.encod...
RSA加密算法(仅公钥加密,私钥解密)
目录 1.RSA的介绍 2.RSA代码   1.RSA的介绍 RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。  想...
Android使用RSA加密解密功能的实现
RSA简介:RSA这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。早在1973年,英国国家通信总局的数学家Clifford Cocks就发现了类似的算法。但是他的发现被列为绝密,直到1998年才公诸于世。RSA算法是一种非对称密码...
JSEncrypt js RSA加密解密
JS用RSA加密解密技术对密码进行加密解密,再在后台使用对应公钥私钥参数进行解密,提升数据安全 jsencrypt.min.js
Android RSA分段加解密,及私钥生成签名公钥验签
rsa是一种比较普遍的移动端加密方式,公钥用于加密跟验签,私钥用于解密跟生成签名,客户端只需要保存一个公钥即可,私钥用于后台。
C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 -变态模式【支持私钥加密,公钥解密】(二)
2019-02-26更新:已上传github RSA变态模式:【私钥加密,公钥解密】 一般这种写法都是JAVA弄的。.NET原生不支持。为啥,我也不清楚,大概是因为安全性问题吧,毕竟公钥是人人都可是持有的。私钥只有自己拥有。 对接注意事项:http://blog.csdn.net/gzy11/article/details/54573973 一般方法请看:http://blog.csdn....
C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥、一般模式【支持公钥加密,私钥解密】(一)
2019-02-26日更新:源码更新至github上。 2017-12-04日更新:增加支持微信支付。代码注释中//☆☆☆☆.NET 4.6以后特有☆☆☆☆的别用,那个不对。 RSA非对称加密。简明扼要吧,直说干货。(在此特别感谢下貳进制,提供JAVA版的公钥私钥) C#RSA加签解签加密比较常见,一般遇到的问题是非.NET代码的加签验签、加密解密。以下就是解决此类问题的。 一般情况下是【...
java实现RSA+AES的简单加密解密
TestAesAndRsapackage com.zhuyun.test; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.SecretKey; import org.junit.Test; import co
delphi (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密
支持 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA1加密、SHA224加密、SHA256加密、SHA384加密、SHA512加密
java 实现RSA实现数据的私钥加密以及公钥解密
1.第一个类KeyGenerate.java生成RSA公钥与私钥并保存到文件中 package signature; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.security.Key
Nodejs crypto模块公钥加密私钥解密探索
1.什么是公钥加密私钥解密 简单一点来说一般加密解密都用的是同一个秘钥或者根本不用,而这里采用的是加密用一个秘钥,解密用另一个秘钥且能解密成功.这就属于不对称加密解密算法的一种了. 2.公钥秘钥的生成 由于这种加密方案,公钥秘钥是成对的,所以需要一些工具生成 利用 openssl 生成公钥私钥 生成公钥: openssl genrsa -out rsa_private_key....
WAS支持RSA公钥解密
需要将 -Dcom.ibm.crypto.provider.DoRSATypeChecking=false  false改为true   详见:http://www-01.ibm.com/support/docview.wss?uid=swg1IV18625   APAR status Closed as program error.   Error des...
非对称加密、公钥和私钥简要说明,Java实现RSA加密/解密/签章/验章
提示: 1、公钥加密只能用私钥解密。 2、私钥加密只能用公钥解密。 3、文章中的密文是指加密后的内容类似:MIGfMA0GC= 4、代码中使用Base64是为了把二进制数组转换为字符串。加密解密内容是二进制,不限于字符串。   本文说明一下非对称加密如何实现安全通讯: A和B两个人进行安全通讯需要:A的公钥和私钥、B的公钥和私钥。 1、A和B保存好自己的私钥不要泄漏。A公开自己...
非对称加密之RSA公钥加密算法
非对称加密之RSA公钥加密算法 一. 公钥加密原理 Diffie和Hellman在1976年首次公开提出了公钥加密思想,这是有文字记载的几千年以来密码领域第一次真正革命性的进步。公钥算法基于数学函数,而不像对称加密算法那样是基于比特模式的简单操作。更为重要的是公钥加密系统是非对称的,它使用两个单独的密钥,使用两个密钥对于保密性、密钥分发和认证都产生了意义深远的影响。 公钥加密方案...
RSA使用前台公钥加密后台私钥解密实例
第一步:(百度搜索RSA获得公钥与私钥)---&gt;拿到公钥就OK了--先备着等下要用到 第二步:工具类(这个写好的直接导入)---》里面有一个main方法可以先测试一下 /** * RSA 工具类。提供加密,解密,生成密钥对等方法。 * &lt;p&gt; * 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。 */ pu...
Golang代码搜集-基于RSA的公钥加密私钥解密-私钥签名公钥验证
首先由genkey.go生成公钥和私文件,在rsa.go里使用生成的公钥和私钥进行加密和解密 //文件 genkey.go //生成公钥和私钥 pem文件 package main import ( &amp;quot;crypto/rand&amp;quot; &amp;quot;crypto/rsa&amp;quot; &amp;quot;crypto/x509&amp;quot; &amp;quot;encoding/pem&amp;
RSA密钥生成、加密解密、数据签名验签
公钥私钥生成 准备工作基础的帮助类 使用java代码生成 使用openssl生成 加解密 数据签名及验签 数据加解密及签名验签测试 注意项公钥、私钥生成准备工作,基础的帮助类 base64的数据帮助类 代码基于jar包javabase64-1.3.1.jarimport java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStre
基于.net的RSA私钥加密 公钥解密的源码(值得下载)
基于.net的RSA私钥加密 公钥解密的源码(值得下载)
RSA加解密工具类
自己封装的RSA加解密工具类,
C# RSA2048 公钥加密,私钥解密
最近开发车辆控制这块,与车上的控制设备进行通信,其中设备向平台注册使用了RSA2048的解密,在网上找了一些加密解密的都是加载XML文件的,公钥(原始的byte[] 294个长度),私钥,我看C#提供的类库里面有一个加载指数,模数的进行解密的功能所以试着实现了一下,下面上代码:using System; using System.IO; using System.Security.Cryptogr...
【Delphi】 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密
【Delphi】支持 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA1加密、SHA224加密、SHA256加密、SHA384加密、SHA512加密
关于公钥私钥是否可以互相加解密的理解(附苹果开发者证书配置时非对称加密算法的应用)
查资料的时候发现很多人有疑惑,公钥和私钥到底哪个是用来加密,哪个是用来解密的,是否可以公钥加密私钥解密,同时也可以私钥加密公钥解密呢?针对这一问题,说下自己的理解。 首先要明确两个问题:(1)既可以公钥加密私钥解密,也可以私钥加密公钥解密;(2)加密解密和签名验证是两个不同的概念。 (一)先来说加密解密:需要同时使用公钥和私钥的加密算法是非对称加密,最常见的便是RSA。 举例
使用Qt调用openssl 从内存中读取私钥对RSA密文进行解密
头文件 #ifndef CTOOLS_H #define CTOOLS_H #include #include #include "openssl/rsa.h" #include "openssl/pem.h" #include #include "lusb0_usb.h" #include #include #include class CTools { public:
RSA算法计算工具,方便计算公钥、私钥
RSA工具,很经典的软件,RSA算法计算工具,方便计算公钥、私钥
RSA公钥私钥的生成及其加密解密过程详解(公司级别质数,原理一样)
首先:我们进行RSA算法的原理剖析: 总所周知RSA算法,是一种非对称加密算发 之所以为非对称,是因为加密和解密的两把钥匙不同,在这个过程的中,密钥的产生是实现过程中的关键: 公式原路为: 明文+public key=密文: 密文-private kēy=明文 过程实现: 1.生成公私钥 (关键) 2.用公钥对指定编码集的字节流进行加密产生密文; 3.用私钥对密文进行解密得出密文; ...
RSA加密算法详解以及RSA在laravel中的应用
最近做APP,由于刚开始开发,所以关于数据传输之间的加密部分还没做。在BOSS的要求下,准备给APP的接口加上RSA加密。先测试一个小demo。一、使用场景      APP接口数据部分的加密。特别是设计到账号密码,如果是明文传输的话,这是极为危险的一件事,因此我们需要在接口部分进行数据加密。这里选用RSA加密方式,前端进行加密,后端进行解密操作。然后后端再进行一些加密,存入数据库。二、RSA的概念