常用语网页客户端对密码加密,在后端java解密还原

java代码依赖
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.4</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>1.52</version>
    </dependency>

js代码依赖 jsencrypt.js

js代码:

// java后台生成的
var publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTu5u08Wel08uWM02GYYRlFXfmEHH7DAbSWufUdU8NlZrE/4BAOwqPMu/vMLdCi4GRHDSmWhoqjC5/7oKoALl6nFCAObtSl6RiWdc8KvcN1D45PASs8M/YPY+oa8iNYZA/drtgXEw4NniC0EB47miGVL4POyLOE3dJlk4LD/AjtQIDAQAB";
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
// 加密
alert(encrypt.encrypt("hello"));

java代码:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.Security;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey; import javax.crypto.Cipher; import org.apache.commons.codec.binary.Base64; public class RSAUtils { private static final KeyPair keyPair = initKey(); private static KeyPair initKey(){
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
SecureRandom random = new SecureRandom();
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
generator.initialize(1024, random);
return generator.generateKeyPair();
}catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 生成public key
* @return
*/
public static String generateBase64PublicKey(){
RSAPublicKey key = (RSAPublicKey)keyPair.getPublic();
return new String(Base64.encodeBase64(key.getEncoded()));
} /**
* 解密
* @param string
* @return
*/
public static String decryptBase64(String string) {
return new String(decrypt(Base64.decodeBase64(string)));
} private static byte[] decrypt(byte[] string) {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
RSAPrivateKey pbk = (RSAPrivateKey)keyPair.getPrivate();
cipher.init(Cipher.DECRYPT_MODE, pbk);
byte[] plainText = cipher.doFinal(string);
return plainText;
}catch (Exception e) {
throw new RuntimeException(e);
}
} public static void main(String[] args) {
// 生成public key
System.out.println(generateBase64PublicKey()); // 解密
System.out.println(decryptBase64("wAfY9JkoKay9SxcPIs1FcG+t6sR+wYwAs/mh9DpfcBraxzqoZdb9LyaAigzFQ0EKck9OyHL0dhv+Uxuw5hHw6CPT0B2Z0i1gwrjDUNaL1gWvqt1pDJVGrIYPLJSjs9xktFhY1jbxQgXGjyCt06Rwid5sJknw90AUO0CyQulfipg="));
} }

最新文章

  1. HTML5之创新的视频拼图剖析式学习之二
  2. IIS安装时,添加/编辑应用程序扩展名映射 确定按钮不可用。
  3. windows2003下安装apache
  4. Device Tree(三):代码分析
  5. 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。
  6. Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
  7. 在VB中使用Linq To SQLite注意事项
  8. Extjs4 MVC Controlller中refs使用
  9. ASCII 对应表 CHR()
  10. UVAlive3126 Taxi Cab Scheme(DAG的最小路径覆盖)
  11. JQUERY1.9学习笔记 之基本过滤器(六) 页眉选择器
  12. __device__ __global__ __host__
  13. 限制TextBox输入,只能输入整数
  14. OCP-1Z0-051-题目解析-第4题
  15. fab 菜单实现—圆形、半圆、扇形、直线、射线
  16. IDEA SpringBoot多模块项目搭建详细过程(转)
  17. Java基础之一
  18. Mysql Group by 使用解析
  19. IntelliJ IDEA 高效率配置
  20. python文件封装成*.exe文件(单文件和多文件)

热门文章

  1. 5G关键技术评述
  2. 跨域请求——WebClient通过get和post请求api
  3. webuploader 谷歌浏览器跨域
  4. js获取可视区域高度
  5. Keepalived的安装
  6. XCode8 App上传AppStore更新
  7. maven: 基本使用
  8. [Tip]重写PanGestureRecognizer
  9. CSS之表单元素
  10. Mysql 常用 SQL 语句集锦