在上一篇文章《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的。
相关推荐
var RSA = require('../../utils/wxapp_rsa.js') 2、调用 var privateKey_pkcs1 = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCk7WKdggwBOtteLL5sPom8RYCjuw0hy6R1jH39tCaep1Dns02bi4CYHk2dSR / t0ABgF5...
这个库提供了RSA加密的JavaScript实现,允许开发者轻松地对文本进行加密和解密。 使用`jsencrypt.min.js`时,首先需要获取公钥和私钥。这通常是在服务器端生成,然后将公钥发送到前端,私钥保留在服务器上。生成RSA...
RSA加密解密是一种广泛应用于网络安全中的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大数因子分解的困难性,为数据提供了一种安全的传输方式。 ...
1. RSA加密不适合加密大量数据,因为它相对较慢,通常用于加密较小的数据块(如对称加密的密钥)或数字签名。 2. 加密时要确保数据正确性,避免出现截断错误,可使用PKCS#1填充方式。 3. 安全存储私钥至关重要,避免...
要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法 初始化环境 新建一个文件夹 node-rsa-demo , 终端进入,运行下面...
在JavaScript环境中,`jsencrypt.js` 是一个实现RSA加密解密功能的库,它允许开发者在前端或后端进行加密和解密操作。以下将详细介绍RSA加密解密的核心概念和`jsencrypt.js`库的使用方法。 1. RSA加密原理: RSA的...
在给定的"兼容JS和C#的RSA加密解密实例"中,我们关注的是如何在JavaScript(前端)和C#(后端)之间使用RSA进行安全的数据交换。这涉及到两个主要的方面:前端的加密和后端的解密。 前端部分,JavaScript通常用于...
使用RSA非对称加密完成JavaScript前端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,但是关于如何使用RSA完成前端的组合加密解密,东西就非常少了,并且由于RSA的特性,一...
JavaScript、Java和RSA加密解密是信息安全领域中的关键技术,它们被广泛应用于数据传输、用户认证、Web应用安全等场景。RSA是一种非对称加密算法,以其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名,它...
**描述详解:** "前端开源库-node-rsa, node.js rsa库" 表明这是一个在Node.js环境中运行的RSA加密库,特别适用于前端开发。RSA是一种非对称加密技术,常用于数据的安全传输,如数字签名、身份验证等场景。开源意味...
在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言的应用增加一层安全防护。 JSEncrypt是一个JavaScript库,由Benjamin van Ryseghem开发,主要用于RSA加密操作,特别适用于前端与后端之间的安全通信。它...
经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,...功能:服务端随机生成密钥,JS用公钥加密,服务端用私钥解密。用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!
JS用RSA加密解密技术对密码进行加密解密,再在后台使用对应公钥私钥参数进行解密,提升数据安全 jsencrypt.min.js
前端使用jsencrypt进行RSA加密解密(uniapp也可用) 一、引入jsencrypt.js文件 jsencrypt.js下载:https://download.csdn.net/download/qq_34692870/85738283?spm=1001.2014.3 值得一提的是,若是引入正常的...
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加密和解密操作,同时考虑到了与其他语言(如JavaScript和Java)的兼容性,提高了数据安全传输的灵活性和便利性。
在JavaScript环境中,`security.js`可能是一个实现了RSA加密解密功能的库。使用此类库可以方便地在前端或后端进行数据的安全处理。"init的值尽量不要太大"可能是指初始化参数,这通常涉及到密钥长度或者加密过程中的...
在实际应用中,RSA算法通常与其它加密方法(如对称加密)结合使用,因为尽管RSA安全性高,但其加密和解密速度相对较慢。常见的做法是使用RSA交换一个对称密钥,然后用这个对称密钥对大量数据进行快速加密和解密,...
本资源包“crypto-js加密解密资源包(含所有前台加密的js代码)”正是为了解决这一问题而设计的,它提供了一系列JavaScript实现的加密算法,适用于那些无法访问Google服务,无法轻易获取此类库的开发者。 首先,...