`

JS-RSA加密解密

阅读更多

  在上一篇文章《Java使用RSA加密解密签名及校验》中,用java实现加密解密,但是在实际应用中,如前端页面用户输入的密码传输给后台服务前,需加密,也就是公钥加密,私钥解密。

  首先把《Java使用RSA加密解密签名及校验》中稍加修改,把公私钥写在代码中来,如下所示:

package com.bijian.study;

import org.apache.commons.codec.binary.Base64;

public class MainTest {
 
	public static void main(String[] args) throws Exception {
		
		System.out.println("--------------公钥加密私钥解密过程-------------------");
		String plainText="ihep_公钥加密私钥解密";
		//公钥加密过程
//		byte[] cipherData=RSAEncrypt.encrypt(RSAEncrypt.loadPublicKeyByStr(RSAEncrypt.loadPublicKeyByFile(filepath)), plainText.getBytes());
		String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3SBa9KmzRVhdysc6gzSouxaH+mGl5xhIVu8APu+O3bkY4wlinlc6O4ZDGHS0kJHY1/Kn9D1xjzpnk7pjLORPvpgZmcuYF5BJdQLtrAxILwbpy42dnRoPs7QRSiG2sKcjsnKoRSszRIr70lFOF05R9Utumay5HFOWFiQaqhHtwp3SfvT250bRo8NKB5JtCbsKQDFsWNPcV7cyq/CKXibGjeelxTdWR7XBIeBhjMTWYO8XBhzlJA8MdGvDw+Eb+TiF/74YqhoDAriUKh36iqObPKFkgZ4uOcfvoe15NxJi6+JFahtR3FwvxukYWBlTgPghOaYaI7YX3VTAvBoRzUM92wIDAQAB";
		byte[] cipherData=RSAEncrypt.encrypt(RSAEncrypt.loadPublicKeyByStr(pubKey), plainText.getBytes());
		
		String cipher=Base64.encodeBase64String(cipherData);
		//私钥解密过程
//		byte[] res=RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(RSAEncrypt.loadPrivateKeyByFile(filepath)), Base64.decodeBase64(cipher));
		
		String priKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdIFr0qbNFWF3KxzqDNKi7Fof6YaXnGEhW7wA+747duRjjCWKeVzo7hkMYdLSQkdjX8qf0PXGPOmeTumMs5E++mBmZy5gXkEl1Au2sDEgvBunLjZ2dGg+ztBFKIbawpyOycqhFKzNEivvSUU4XTlH1S26ZrLkcU5YWJBqqEe3CndJ+9PbnRtGjw0oHkm0JuwpAMWxY09xXtzKr8IpeJsaN56XFN1ZHtcEh4GGMxNZg7xcGHOUkDwx0a8PD4Rv5OIX/vhiqGgMCuJQqHfqKo5s8oWSBni45x++h7Xk3EmLr4kVqG1HcXC/G6RhYGVOA+CE5phojthfdVMC8GhHNQz3bAgMBAAECggEBAL+zfSb+t9w2b5mMfr2guWb4cYovfZSLCKvVJ3FoXYL7JQgu6sA6/tD75M8e3is3RbZxOAoV+o0hJQp9W91fUYL6ebdLOd+zxvsaPtIZE7sxUx6U9z9riJFSWmraL3eWbuwVWqwcd6XEl+wNcJXj4Em3y3qOsyxLiqJHSpaGVImSi8xgIgNpnij9lbR2ljnv/4SWWyx8Uz4837MhClWDdAbsA5demnBNbMzw2vgvBOF6PrMxCZnw+aL7t8g3HeSS6jSUXTYxPL10yNTHX4Bt7LAY6lDfpZQ4IrH+BWRobpbLeeyjM2zkzaNXtTSKq/W/+4lGfxNQfOIUTQCd++erdIECgYEA/OiZgB4E1SE9Ekh+lXWsTkOU3Tb4NJlTwuV4RufoOBLexLbclz82j+4C6E3NUuaacSo9KLaYknUATzrKGDHN3icJIcG4575vzsvSzOn/cJk0o/Jc4uVX2cEoPxaXIkMN+21j9KqxYLQ3xGY5wFXR/6CMku2YuyyFu97gHRSglSUCgYEA39RNjrRxWA4vtnm9yamDVlDcbxxF663g9W88E+xp6cZe+2032Golhbhhp8bjV0hyWWFj5VObJ8tqwgRfcKhpy8luBHxR4b4vgqPKL4nxm1Phtg/lIZIowUSdeIxE9BnTId4Ekx5hqOZCe8G3WFba7uAZ/sS3Ils6zR1Wzv3Plv8CgYEA84b+GBHP0XJaHjrUORLAQfRtab2+rtddgnP3pz8zqprxCzaRnsntvhYPkqUoKsWGvaVQkt2QeKZVD/WqGDYM5/dqoaiqZexIOTam204O+9tqhtufeZQhTbrjCCy2hvVOh2ZEM5oRhu7CLEnLHlsFBUMRWYGT6dfrRoZMA3STVEkCgYEAw6SKdiX6vIEJ63HWFiL5DcV4KBaKd0pwy5cC6FdI7HHcK+B3Y87EJXHYyhHqPSyx5rZd3uGJSOtg0V2JHqvWba4PYBRabfsTBBmubIcijCZxr/WMzh83SFd1XR0eWE8KYRvy27U+n6dEjW/xlmG00/9GOY4wlPMxHoB6lEr93HkCgYBovoZekXRiiYjVXfDDxh5RgKXXbpESuW+5M/NoRje07uj9KwXiCagvyr71Ahx0m626ysRATSDKJ9xR6y28hmuD0e8ju29jtsR/r66vetfb5KdpmQ2CbsT73OLS0gwicjPEEZj3D0w1bc5Hx6Kurjh2Q9Dx4RqAErhqCFkOO3sWGw==";
		byte[] res=RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(priKey), Base64.decodeBase64(cipher));
		String restr=new String(res);
		System.out.println("原文:"+plainText);
		System.out.println("加密:"+cipher);
		System.out.println("解密:"+restr);
		System.out.println();
	}
}

  运行结果如下所示:

--------------公钥加密私钥解密过程-------------------
原文:ihep_公钥加密私钥解密
加密:R7HZzg6aOwuGEITA4P8s7HE/RZq/W1tik4CT/5Nf+GqwuJJC7n2CJxgL72TNwXrTDr0Jku9AyRZ2GoD5mwn7DLhAANVv0O0SMAGGRX+3rg4owv3AdyjjZhV1GjQdeClHrLq/MdTbCsvBCNo4vf6sjwEpuSlqTHqr+ioP+mIqz/r3dQwT86tu4mDJ61h5M51c74M25Q648Eh2O8AzvHgVn5SHaQgjVUZqZJl5zG4WdiPwuTKZEkEnp+4ie/uW1uyv/4IkfmF9B2rEP5KJOdbIXEw5lxZeGs1nGZeUqdh5Is6wVWUHnNDOwpRk6BDqcjxH7cye3PhqpgtyO7BwLm7RIg==
解密:ihep_公钥加密私钥解密

  我从网上找到JS-RSA的代码地址:https://github.com/openstack/xstatic-jsencrypt/blob/master/xstatic/pkg/jsencrypt/data/jsencrypt.js,使用方法如下:

首先引入jsencrypt.js,然后获取RSA的公钥和私钥。
var encrypt=new JSEncrypt();
encrypt.setPublicKey(RSA的公钥);
encrypt.encrypt(加密的内容);
这样加密就成功了,然后解密也很简单。
encrypt.setPrivateKey(RSA的私钥);
encrypt.decrypt(解密的内容);

  将jsencrypt.js拷贝下来,然后F12在浏览器中运行如下:


  当然,我想进一步验证JS-RSA用公钥加密得到加密串,用java来解密,看是否OK,于是把上面JS-RSA生成密文拷贝到java代码中,如下所示:

package com.bijian.study;

import org.apache.commons.codec.binary.Base64;

public class MainTest {
 
	public static void main(String[] args) throws Exception {
		String cipher = "sx2Rwuokxwm6UnnsEjMBUCAee5Lc7lg8K9XU1EYzXmEuBvhyyNxxBwsl25dFridOeYhxuVuMbxIqK1xhroyzb0d+tdFrAalQ6DK+OMaUIHjKfP1v3JIVJyTVE8BdLoTd+982PwPbe0TeKfCq5HYSjqb+5AWv5dYyVyFha4v373+HmWQxG+nTFN2lnlnPBbG0cWO+ykdmtfKRtAyhxJ5uYnWYhFzbbDfExmTMi4rwkJOWH5YmuxRRb6v1o6x32+Fr+WgtCXq6Nkq58epSzz80GPGn4BfOd4mj9wxs62GWj8O6sHm+yBgfNOB+rPE82PGcNKkL7eHoXpHGlY51KTKE2A==";
		
		String priKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdIFr0qbNFWF3KxzqDNKi7Fof6YaXnGEhW7wA+747duRjjCWKeVzo7hkMYdLSQkdjX8qf0PXGPOmeTumMs5E++mBmZy5gXkEl1Au2sDEgvBunLjZ2dGg+ztBFKIbawpyOycqhFKzNEivvSUU4XTlH1S26ZrLkcU5YWJBqqEe3CndJ+9PbnRtGjw0oHkm0JuwpAMWxY09xXtzKr8IpeJsaN56XFN1ZHtcEh4GGMxNZg7xcGHOUkDwx0a8PD4Rv5OIX/vhiqGgMCuJQqHfqKo5s8oWSBni45x++h7Xk3EmLr4kVqG1HcXC/G6RhYGVOA+CE5phojthfdVMC8GhHNQz3bAgMBAAECggEBAL+zfSb+t9w2b5mMfr2guWb4cYovfZSLCKvVJ3FoXYL7JQgu6sA6/tD75M8e3is3RbZxOAoV+o0hJQp9W91fUYL6ebdLOd+zxvsaPtIZE7sxUx6U9z9riJFSWmraL3eWbuwVWqwcd6XEl+wNcJXj4Em3y3qOsyxLiqJHSpaGVImSi8xgIgNpnij9lbR2ljnv/4SWWyx8Uz4837MhClWDdAbsA5demnBNbMzw2vgvBOF6PrMxCZnw+aL7t8g3HeSS6jSUXTYxPL10yNTHX4Bt7LAY6lDfpZQ4IrH+BWRobpbLeeyjM2zkzaNXtTSKq/W/+4lGfxNQfOIUTQCd++erdIECgYEA/OiZgB4E1SE9Ekh+lXWsTkOU3Tb4NJlTwuV4RufoOBLexLbclz82j+4C6E3NUuaacSo9KLaYknUATzrKGDHN3icJIcG4575vzsvSzOn/cJk0o/Jc4uVX2cEoPxaXIkMN+21j9KqxYLQ3xGY5wFXR/6CMku2YuyyFu97gHRSglSUCgYEA39RNjrRxWA4vtnm9yamDVlDcbxxF663g9W88E+xp6cZe+2032Golhbhhp8bjV0hyWWFj5VObJ8tqwgRfcKhpy8luBHxR4b4vgqPKL4nxm1Phtg/lIZIowUSdeIxE9BnTId4Ekx5hqOZCe8G3WFba7uAZ/sS3Ils6zR1Wzv3Plv8CgYEA84b+GBHP0XJaHjrUORLAQfRtab2+rtddgnP3pz8zqprxCzaRnsntvhYPkqUoKsWGvaVQkt2QeKZVD/WqGDYM5/dqoaiqZexIOTam204O+9tqhtufeZQhTbrjCCy2hvVOh2ZEM5oRhu7CLEnLHlsFBUMRWYGT6dfrRoZMA3STVEkCgYEAw6SKdiX6vIEJ63HWFiL5DcV4KBaKd0pwy5cC6FdI7HHcK+B3Y87EJXHYyhHqPSyx5rZd3uGJSOtg0V2JHqvWba4PYBRabfsTBBmubIcijCZxr/WMzh83SFd1XR0eWE8KYRvy27U+n6dEjW/xlmG00/9GOY4wlPMxHoB6lEr93HkCgYBovoZekXRiiYjVXfDDxh5RgKXXbpESuW+5M/NoRje07uj9KwXiCagvyr71Ahx0m626ysRATSDKJ9xR6y28hmuD0e8ju29jtsR/r66vetfb5KdpmQ2CbsT73OLS0gwicjPEEZj3D0w1bc5Hx6Kurjh2Q9Dx4RqAErhqCFkOO3sWGw==";
		byte[] res=RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(priKey), Base64.decodeBase64(cipher));
		String restr=new String(res);
		System.out.println("解密:"+restr);
		System.out.println();
	}
}

  运行结果如下所示:


  这说明JS-RSA用公钥加密得到加密串,用java来解密,完全是OK的。

 

参考文章:https://www.cnblogs.com/zaxxm/p/5144267.html

  • 大小: 154.5 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

    微信小程序-微信小程序-RSA-签名-验签-加密-解密

    var RSA = require('../../utils/wxapp_rsa.js') 2、调用 var privateKey_pkcs1 = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCk7WKdggwBOtteLL5sPom8RYCjuw0hy6R1jH39tCaep1Dns02bi4CYHk2dSR / t0ABgF5...

    JavaScript-RSA加解密

    这个库提供了RSA加密的JavaScript实现,允许开发者轻松地对文本进行加密和解密。 使用`jsencrypt.min.js`时,首先需要获取公钥和私钥。这通常是在服务器端生成,然后将公钥发送到前端,私钥保留在服务器上。生成RSA...

    RSA加密解密的使用,含jsencrypt.js文件(uni-app也可用)

    RSA加密解密是一种广泛应用于网络安全中的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大数因子分解的困难性,为数据提供了一种安全的传输方式。 ...

    JS-RSA加解密的压缩包

    1. RSA加密不适合加密大量数据,因为它相对较慢,通常用于加密较小的数据块(如对称加密的密钥)或数字签名。 2. 加密时要确保数据正确性,避免出现截断错误,可使用PKCS#1填充方式。 3. 安全存储私钥至关重要,避免...

    NodeJS加密解密及node-rsa加密解密用法详解

    要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法 初始化环境 新建一个文件夹 node-rsa-demo , 终端进入,运行下面...

    rsa加密解密js文件

    在JavaScript环境中,`jsencrypt.js` 是一个实现RSA加密解密功能的库,它允许开发者在前端或后端进行加密和解密操作。以下将详细介绍RSA加密解密的核心概念和`jsencrypt.js`库的使用方法。 1. RSA加密原理: RSA的...

    兼容JS和C#的RSA加密解密实例

    在给定的"兼容JS和C#的RSA加密解密实例"中,我们关注的是如何在JavaScript(前端)和C#(后端)之间使用RSA进行安全的数据交换。这涉及到两个主要的方面:前端的加密和后端的解密。 前端部分,JavaScript通常用于...

    JavaScript_RSA加解密+分段加解密.zip

    使用RSA非对称加密完成JavaScript前端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,但是关于如何使用RSA完成前端的组合加密解密,东西就非常少了,并且由于RSA的特性,一...

    Js Java Rsa 加密解密

    JavaScript、Java和RSA加密解密是信息安全领域中的关键技术,它们被广泛应用于数据传输、用户认证、Web应用安全等场景。RSA是一种非对称加密算法,以其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名,它...

    前端开源库-node-rsa

    **描述详解:** "前端开源库-node-rsa, node.js rsa库" 表明这是一个在Node.js环境中运行的RSA加密库,特别适用于前端开发。RSA是一种非对称加密技术,常用于数据的安全传输,如数字签名、身份验证等场景。开源意味...

    易语言调用JSEncrypt实现RSA加密解密

    在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言的应用增加一层安全防护。 JSEncrypt是一个JavaScript库,由Benjamin van Ryseghem开发,主要用于RSA加密操作,特别适用于前端与后端之间的安全通信。它...

    RSA加密解密 JS加密 JAVA解密 【完美版】

    经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,...功能:服务端随机生成密钥,JS用公钥加密,服务端用私钥解密。用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!

    JSEncrypt js RSA加密解密

    JS用RSA加密解密技术对密码进行加密解密,再在后台使用对应公钥私钥参数进行解密,提升数据安全 jsencrypt.min.js

    前端使用jsencrypt进行RSA加密解密(uniapp也可用)

    前端使用jsencrypt进行RSA加密解密(uniapp也可用) 一、引入jsencrypt.js文件 jsencrypt.js下载:https://download.csdn.net/download/qq_34692870/85738283?spm=1001.2014.3 值得一提的是,若是引入正常的...

    RSA加密解密 PHP JS

    RSA加密解密是一种广泛应用于网络...在JavaScript中,使用`crypto-js`库进行RSA加密解密的示例代码如下: ```javascript <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/jsbn.js"> ...

    C#RSA加密解密工具

    总的来说,C# RSA加密解密工具是一个实用的开发辅助工具,帮助开发者在C#环境中方便地实现RSA加密和解密操作,同时考虑到了与其他语言(如JavaScript和Java)的兼容性,提高了数据安全传输的灵活性和便利性。

    security.js rsa加密解密

    在JavaScript环境中,`security.js`可能是一个实现了RSA加密解密功能的库。使用此类库可以方便地在前端或后端进行数据的安全处理。"init的值尽量不要太大"可能是指初始化参数,这通常涉及到密钥长度或者加密过程中的...

    非对象加密算法-rsa加解密 公钥加密私钥解密

    在实际应用中,RSA算法通常与其它加密方法(如对称加密)结合使用,因为尽管RSA安全性高,但其加密和解密速度相对较慢。常见的做法是使用RSA交换一个对称密钥,然后用这个对称密钥对大量数据进行快速加密和解密,...

    crypto-js加密解密资源包(含所有前台加密的js代码)

    本资源包“crypto-js加密解密资源包(含所有前台加密的js代码)”正是为了解决这一问题而设计的,它提供了一系列JavaScript实现的加密算法,适用于那些无法访问Google服务,无法轻易获取此类库的开发者。 首先,...

Global site tag (gtag.js) - Google Analytics