精华内容
下载资源
问答
  • RSA解密RSA解密

    2015-03-06 15:26:36
    RSA解密RSA解密
  • java+js基于RSA解密解密

    2020-07-22 17:56:00
    java接口数据加密解密,基于RSA原理,java与js对数据加密,解密的demo案例。 java+js基于RSA解密解密。
  • 公钥RSA解密

    2019-07-19 09:37:27
    此为RSA解密的方法 public static byte[] decrypt(byte[] encryptedBytes, PrivateKey privateKey, int keyLength, int reserveSize, String cipherAlgorithm) throws Exception { int keyByteSize = keyLength / ...

    此为RSA解密的方法

    public static byte[] decrypt(byte[] encryptedBytes, PrivateKey privateKey, int keyLength, int reserveSize, String cipherAlgorithm) throws Exception {
    		int keyByteSize = keyLength / 8;
    		int decryptBlockSize = keyByteSize - reserveSize;
    		int nBlock = encryptedBytes.length / keyByteSize;
    		ByteArrayOutputStream outbuf = null;
    		try {
    			Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    			cipher.init(Cipher.DECRYPT_MODE, privateKey);
    
    			outbuf = new ByteArrayOutputStream(nBlock * decryptBlockSize);
    			for (int offset = 0; offset < encryptedBytes.length; offset += keyByteSize) {
    				int inputLen = encryptedBytes.length - offset;
    				if (inputLen > keyByteSize) {
    					inputLen = keyByteSize;
    				}
    				byte[] decryptedBlock = cipher.doFinal(encryptedBytes, offset, inputLen);
    				outbuf.write(decryptedBlock);
    			}
    			outbuf.flush();
    			return outbuf.toByteArray();
    		} catch (Exception e) {
    			throw new Exception("DEENCRYPT ERROR:", e);
    		} finally {
    			try{
    				if(outbuf != null){
    					outbuf.close();
    				}
    			}catch (Exception e){
    				outbuf = null;
    				throw new Exception("CLOSE ByteArrayOutputStream ERROR:", e);
    			}
    		}
    	}
    

    去调用这个方法:

    byte[] b = decrypt(Base64.decodeBase64(encrypt_random_key), privateKey, 2048, 11, "RSA/None/PKCS1Padding");
    				String encrypt_key = new String(b,"utf-8");
    

    更多技术文章请关注公众号:架构师Plus,
    扫码添加
    在这里插入图片描述

    展开全文
  • RSA解密正确性证明

    2021-03-12 16:40:24
    RSA解密正确性证明 先描述一下RSA密码体制: RSA密码体制: 大素数p,qp,qp,q,模数n=pqn=pqn=pq,加密指数bbb,解密指数aaa,满足ab≡1(modϕ(n))ab\equiv1 \pmod{\phi(n)}ab≡1(modϕ(n))。 加密:c=mb mod nc=m...

    RSA解密正确性证明

    先描述一下RSA密码体制:

    RSA密码体制:

    大素数p,qp,q,模数n=pqn=pq,加密指数bb,解密指数aa,满足ab1(modϕ(n))ab\equiv1 \pmod{\phi(n)}

    加密:c=mbmodnc=m^{b}\bmod{n}

    解密:m=camodnm=c^{a}\bmod{n}

    本篇是证明RSA解密确实能够得到明文mm

    mZnm\in \mathbb{Z}_{n}^{*}

    此时,gcd(m,n)=1gcd(m,n)=1;解密公式为
    camabmtϕ(n)+1(modn) c^{a}\equiv m^{ab}\equiv m^{t\phi(n)+1}\pmod{n}
    由欧拉定理得到
    mtϕ(n)+1m(modn) m^{t\phi(n)+1}\equiv m\pmod{n}
    所以解密得到的是明文。

    m∉Znm\not \in \mathbb{Z}_{n}^{*}

    此时,由于gcd(m,n)1gcd(m,n)\ne 1,所以欧拉定理不能用。

    我们分析:n=pqn=pq,且p,qp,q都是素数,若m,nm,n不互素,则必有pmp|m或者qmq|m。不失一般性,设pmp|m,则gcd(q,m)=1gcd(q,m)=1,否则nmn|m。由ϕ(n)=(p1)(q1)\phi(n)=(p-1)(q-1)和欧拉定理有
    mϕ(n)1(modq) m^{\phi(n)}\equiv 1\pmod{q}
    ab=tϕ(n)+1ab=t\phi(n)+1,则:
    mtϕ(n)1(modq) m^{t\phi(n)}\equiv 1\pmod{q}
    即存在kk,满足
    mtϕ(n)=kq+1mtϕ(n)+1=mkq+mmtϕ(n)+1=lpkq+m m^{t\phi(n)}=kq+1\\ m^{t\phi(n)+1}=mkq+m\\ m^{t\phi(n)+1}=lpkq+m
    所以有
    mtϕ(n)+1m(modn) m^{t\phi(n)+1}\equiv m\pmod{n}
    证毕!

    拓展

    证明还可以根据如下事实:x1x2(modpq)x_{1}\equiv x_{2}\pmod{pq}当且仅当x1x2(modp)x_{1}\equiv x_{2}\pmod{p}x1x2(modq)x_{1}\equiv x_{2}\pmod{q}

    证:当pmp|mmabm(modq)m^{ab}\equiv m\pmod{q}mabm0(modp)m^{ab}\equiv m\equiv 0 \pmod{p},所以有mabm(modn)m^{ab}\equiv m\pmod{n}

    展开全文
  • RSA加密与RSA解密

    2017-04-11 17:53:16
    采用快速幂算法以及扩展欧几里得算法实现RSA的加密与解密
  • RSA解密报 Decryption error

    万次阅读 多人点赞 2017-05-11 14:05:11
    RSA解密报 Decryption error的解决办法





    最近在使用RSA加密密码,后台test类测试没问题,但js前端传过来却解析失败,报Decryption error.纠结了一晚上,终于发现了问题的所在


    简单介绍一下:


    RSA可以实现非对称加密。一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。
    阮一峰曾介绍过:“这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。
    也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。”;


    (1)私钥是用来解密的,自己用(永久保密)
    (2)公钥是用来加密的,别人用(公开透明)
    (3)甲方用乙方提供的公钥对合同加密,甲方把密文发送给乙方,乙收到密文使用自己的私钥对其解密。


    在解密时,需要将 request.getParameter接收到的String转为char[] ;
    Java-text 方法测试时char[] 的长度为128;
    js前端    方法测试时char[] 的长度为127;
      这个就是解密失败的关键(^_^惊不惊喜 ?高不高兴?)

    只是为什么呢?  因为我们前台调后台逻辑时,特殊字符是转译后传送过来的。我这加密后的字符串 +号  变成了 空格,所以导致解密失败;
    加密密文包含以下字符串,都会导致解密失败。切记!!
    • 1. + URL 中+号表示空格 %2B  
    • 2. 空格URL中的空格可以用+号或者编码 %20  
    • 3. / 分隔目录和子目录 %2F   
    • 4. ? 分隔实际的 URL 和参数 %3F   
    • 5. % 指定特殊字符 %25   
    • 6. # 表示书签 %23   
    • 7. & URL 中指定的参数间的分隔符 %26   
    • 8. = URL 中指定参数的值 %3D 

    知道了8个特殊符号号,我们就要避开;

    String password = request.getParameter("login_password").trim();  //取值
    password= password.replaceAll(" ","+");//将空格转为+号
    String decryptPassword = RSAUtil.decrypt(password, PrivateKey);//解密后的


    这样就成功解密了

    ============================分割线======================================


    因为我是干java的,写的是webapp;但领导让打包成app;前端加密用的是jsencrypt.min.js; 用的ajax调用的,一点问题没有;
    但是搞Android和IOS的他们用的是HTTP的post请求方式,搞的我很纠结,每次都导致解密失败;
    后来IOS的调没问题了,但是安卓的依然有问题。这让人百思不得其小姐姐;


    Android解决方案如下:
    JAVA后台RSAUtil工具类中:
    Cipher cipher = Cipher.getInstance("RSA");
    Android后台中:
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    这样就完美解决Android解密失败了






    展开全文
  • javaRSA加密C++RSA解密

    2017-11-28 16:32:04
    Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...
  • 加密串传到后台,后端查询用户注册的密码(RSA加密后的),对两个加密串RSA解密,解密后对比密码是否相同。 参考 https://github.com/travist/jsencrypt https://www.jianshu.com/p/e19dc0b4fe78 ...

    需求描述:用户网页登录,使用RSA对密码进行加密;加密串传到后台,后端查询用户注册的密码(RSA加密后的),对两个加密串RSA解密,解密后对比密码是否相同。

    参考

    https://github.com/travist/jsencrypt
    https://www.jianshu.com/p/e19dc0b4fe78
    https://blog.csdn.net/weixin_43652442/article/details/87875491

    JS加密、JAVA解密,有两条路:

    1. 根据jsencrypt步骤,使用bash命令生成公钥和私钥;
    2. 使用Java 代码生成公钥和私钥;

    先看下第二种方式如何实现:

    • 项目中运行RasUtils工具类,生成公钥和私钥,并进行下测试
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    import javax.crypto.Cipher;
    import java.io.IOException;
    import java.security.*;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    
    public class RSAUtils {
    
        //生成秘钥对
        public static KeyPair getKeyPair() throws Exception {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(2048);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            return keyPair;
        }
    
        //获取公钥(Base64编码)
        static String getPublicKey(KeyPair keyPair) {
            PublicKey publicKey = keyPair.getPublic();
            byte[] bytes = publicKey.getEncoded();
            return new BASE64Encoder().encode((bytes));
        }
    
        //获取私钥(Base64编码)
        static String getPrivateKey(KeyPair keyPair) {
            PrivateKey privateKey = keyPair.getPrivate();
            byte[] bytes = privateKey.getEncoded();
            return new BASE64Encoder().encode((bytes));
        }
    
        //将Base64编码后的公钥转换成PublicKey对象
        static PublicKey string2PublicKey(String pubStr) throws Exception {
            byte[] keyBytes = new BASE64Decoder().decodeBuffer((pubStr));
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            return keyFactory.generatePublic(keySpec);
        }
    
        //将Base64编码后的私钥转换成PrivateKey对象
        static PrivateKey string2PrivateKey(String priStr) throws Exception {
            byte[] keyBytes = new BASE64Decoder().decodeBuffer((priStr));
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            return keyFactory.generatePrivate(keySpec);
        }
    
        //公钥加密
        public static String publicEncrypt(String content, String publicKeyStr) throws Exception {
            PublicKey publicKey = RSAUtils.string2PublicKey(publicKeyStr);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] bytes = cipher.doFinal(content.getBytes());
            return new BASE64Encoder().encode(bytes);
        }
    
        //私钥解密
        public static byte[] privateDecrypt(String content, String privateKeyStr) throws Exception {
            PrivateKey privateKey = RSAUtils.string2PrivateKey(privateKeyStr);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] bytes = cipher.doFinal(new BASE64Decoder().decodeBuffer(content));
            return bytes;
        }
    
    
        public static void main(String[] args) {
            try {
                //===============生成公钥和私钥,公钥传给客户端,私钥服务端保留==================
                KeyPair keyPair = RSAUtils.getKeyPair();
                String publicKeyStr = RSAUtils.getPublicKey(keyPair);
                String privateKeyStr = RSAUtils.getPrivateKey(keyPair);
                System.out.println("RSA公钥Base64编码:" + publicKeyStr);
                System.out.println("RSA私钥Base64编码:" + privateKeyStr);
    
                //=================开始加密=================
                String message = "panda";
                //用公钥加密
                String publicEncrypt = RSAUtils.publicEncrypt(message, publicKeyStr);
                System.out.println("公钥加密并Base64编码的结果:" + publicEncrypt);
    
    
                //===================开始解密================
                //用私钥解密
                byte[] privateDecrypt = RSAUtils.privateDecrypt(publicEncrypt, privateKeyStr);
                //解密后的明文
                System.out.println("解密后的明文: " + new String(privateDecrypt));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    运行这个工具类可以看到对字符串加密解密成功;从输出中截取公钥和私钥;
    公钥存储在JS端,供JS加密使用;
    私钥保存在Java后端,供解密用;

    • 编写HTML页面进行字符串加密
    <!doctype html>
    <html>
      <head>
        <title>JavaScript RSA Encryption</title>
        <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <script src="去github中下载jsencrypt.js"></script>
        <script type="text/javascript">
    
          // Call this code when the page is done loading.
          $(function() {
    
            // Run a quick encryption/decryption when they click.
            $('#testme').click(function() {
    
              // Encrypt with the public key...
              var encrypt = new JSEncrypt();
              encrypt.setPublicKey('刚才Java生成的公钥');
              var encrypted = encrypt.encrypt('要加密的内容');
              console.log(encrypted);
            });
          });
        </script>
      </head>
      <body>
        
      </body>
    </html>
    

    页面加载完毕,就会在控制台输出加密后的字符串;你可以使用该加密串返回到java中,进行解密来验证.

    到此为止,基本可以实现前端RSA加密,后端RSA解密了;

    再来看下实现方法一

    1. 我们按照jsencrypt github中的步骤,一步一步使用bash生成公钥和私钥
      1.1 openssl genrsa -out rsa_1024_priv.pem 1024
      1.2 cat rsa_1024_priv.pem #输出私钥
      1.3 openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
      1.4 cat rsa_1024_pub.pem #输出公钥
      1.5 使用github中下一步的html进行验证,也可以成功(代码略,大家可自行去github中查看)
    2. 在ResUtils中使用刚才生成的公钥进行解密,很大几率会抛出异常

    algid parse error, not a sequence

    • 原因:私钥在使用前为pkcs1格式,而java在不引用第三方包的情况下无法直接使用pkcs1格式的秘钥,需要将其转化为pkcs8编码
    • 解决方案:
    • openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -out rsa_private_key_01.pem -nocrypt

    使用rsa_private_key_01.pem中的秘钥即可

    展开全文
  • RSA密码解密(RSA Cipher Decryption)本章是前一章的延续,我们使用RSA算法逐步实现加密,并详细讨论它。用于解密密文的函数如下 -def decrypt(ciphertext, priv_key):cipher = PKCS1_OAEP.new(priv_key)return ...
  • RSA解密出现乱码的问题

    千次阅读 2019-07-16 17:47:58
    RSA解密是后经常会出现乱码、或者是badpadding或者是mustsatrtzero的问题,下边我就给大家解释结局一个乱码的问题,其他的都好说, mustsatrtzero的问题无非就是你加密之后会有”+“号,拼参数访问的时候浏览器会...
  • 中国剩余定理在RSA解密中的应用,可用于学习和应用密码学时参考
  • 我试图使用我的设备上生成的RSA密钥解密我的Android应用程序中的字符串 . 加密是由php服务完成的,使用我的应用程序提供的public rsa密钥 . 我的问题是解密,但失败了 .我正在做以下事情:在Android上生成KeyPair...
  • jdk1.4不支持RSA解密

    2019-08-19 10:53:07
    JDK1.4不支持RSA解密,在网上查找相关办法予以解决。 1、下载bcprov-jdk14-1.47包,放在C:\j2sdk1.4.2\jre\lib\security目录下 2、更改C:\j2sdk1.4.2\jre\lib\security目录下的java.security文件,添加 security....
  • RSA解密报错:javax.crypto.BadPaddingException: Decryption error RSA解密方法默认byte数组长度为128,实际上长度应该为256。 把RSA解密方法中的: byte[] buffer = new byte[128]; 修改为: byte[] buffer = new...
  • RSA解密 我不会写,直接放弃~???? C++和Java版答案 完全二叉树的权值 把完全二叉树转化成数组就行了,节点对应数组下标,有这么的规律:设深度为deep,每一层最右边的为2^deep-1,所以再对应数组下标再-1就行了。...
  • 今天部署项目是,本地正常,但部署到weblogic上后,发生RSA解密出现如下情况(正确的应该是00031800)解出来的密文是 o�eמ����DK��ʢ���{IFsP���Ą��^l%�FK"aj�'e�1�Sv�6�� ��Lt�&����...
  • Android RSA解密

    2018-09-14 08:17:46
    目前项目有一个后台是使用RSA公钥加密,而后台给我的私钥是字符串, 请问如何把后台给的是要的字符串转换成PrivateKey
  • RSA解密java加密串

    2015-11-03 10:10:16
    //RSA解密java加密串  public string decrypt1(string encryptedData)  {  IAsymmetricBlockCipher cipher = new RsaEngine();  byte[] encryptData = Convert.FromBase64String
  • 最近筹备一场CTF比赛发现了一道关于RSA解密的题如下: #小明得到了一个 RSA 加密信息,你能帮他解开吗? n = 41069065654959614597750207738698085798765257876378561837894254544512565197793 c = ...
  • DEBUG打断点观察取到的数据也是一致的,但是在使用RSA解密时,入参的解密是正常没问题的。出参这一块的解密就报javax.crypto.BadPaddingException: Decryption error这个错误。 这是入参时候的处理,这边...
  • HDU 1211 RSA 解密

    2013-01-15 15:27:02
    /* ...RSA解密: 通过知道的 mod,和 k ,然后进行对密码破密.... */ #include #include #include #define manx 50000 using namespace std; long long kzgcd(long long a,long long b,long lon
  • RSA解密-提供enc和pem文件类

    千次阅读 2018-09-17 18:47:05
    RSA解密 ——提供enc和pem文件类 解压文件包发现两个文件,flag.enc和pub.pem两个文件。首先我们会想到openssl。这类题目需要用linux的openssl来解...
  • 一、由于项目需要,前端把密码用RSA加密后传输到后端,后端进行RSA解密后再与数据库中的密码进行对比,接受到前端传过来的加密后的密码,在进行解密的时候出现错误了: javax.crypto.BadPaddingException : ...
  • Android之RSA解密

    2019-04-02 16:55:23
    加密解密接触的最多的莫过于MD5的加密解密,今天我们介绍一下RSA解密RSA一般有两个钥,一个公钥用于加密,一个私钥用于解密。 下面简单的说一下,这个过程: 1)我们命名一个PRIVATE_KEY类型为String的秘钥,...
  • ## 关于RSA解密失败记录 ##

    千次阅读 2016-09-01 15:47:13
    关于RSA解密失败记录在做公司项目时候,同事使用java加密一段数据,让我进行一下测试,是否能解密成功,但是研究一上午发无果,最后老大指出java默认解密和Android默认解密的Padding不同,特此记录,以免后续再犯!...
  • rsa解密tip

    2015-12-16 11:55:59
    Android的虽然是java api 但不是原生... rsa 加密的问题 如果Android需要解密的话 需要 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") 而不是 Cipher cipher = Cipher.getInstance("RSA")
  • RSA解密】 蓝桥杯第十届省赛A组 扩展欧几里得算法(求逆元)+快速乘+快速幂,很综合的一道题。
  • RSA解密python代码

    千次阅读 2018-03-15 13:22:04
    在做CTF的题时遇到了一个RSA解密问题,后来自己做了一下解密代码,放到下面,顺便把题目也带上 题目 题目描述: 给定RSA密文[971,922,605,1446,1704,889,2090,605,1899,1915,2088,1988,1235,1032,65,922,958,...
  • 今天在用Rsa解密服务端的数据时,碰到了部分乱码的问题,虽然能解密出正确的数据但是里面会多出一堆乱码.一开始以为是编码的问题,可是全都设置成了utf-8也是不行; 最后的解决方法如下:  移动端私钥解密 在移动端...
  • 求大神帮我编一个RSA解密代码,运用共模攻击的方法。 http://www.tuicool.com/articles/IzuYfu 共模攻击介绍 已知N和e1 e2及加密后的c1 c2 求原文m和秘钥D。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,751
精华内容 5,100
关键字:

rsa解密