欢迎来访下代码,网站建设及模板提供商!
微信
在线客服QQ:644080923
收藏本站
帮助中心
关于我们
热搜:
代码授权
网站模板
客户案例
服务中心
建站教程
所有产品分类
网站模板
新闻资讯
博客媒体
图库图片
网络公司
信息科技
科技产品
客户案例
企业官网
综合门户
新闻媒体
购物商城
服务中心
系统部署
宝塔部署
证书安装
ICP备案
网站首页
网站模板
新闻资讯
博客媒体
图库图片
网络公司
信息科技
科技产品
客户案例
企业官网
综合门户
新闻媒体
购物商城
服务中心
系统部署
宝塔部署
证书安装
ICP备案
更多
建站教程
cms教程
cms文档
服务器教程
数据库教程
资源下载
您现在的位置:
网站首页
>
建站教程
>
登录功能使用RSA加密解密
发布时间:2023-12-21
热度: ℃
1、用后台代码生成公钥、私钥,前端用公钥加密,后端用私钥解密 ```java package com.cms.util; import com.jfinal.kit.Base64Kit; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.*; import java.security.interfaces.RSAKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import java.util.regex.Pattern; /** * @author Ricky Fung */ public class RSAUtils { private static final String RSA_ALGORITHM = "RSA"; public static String getPublicKey(PublicKey publicKey) { return Base64Kit.encode(publicKey.getEncoded()); } public static String getPrivateKey(PrivateKey privateKey) { return Base64Kit.encode(privateKey.getEncoded()); } //------------------------------ /** * generate KeyPair * @return * @throws NoSuchAlgorithmException */ public static KeyPair generateKeyPair(int keySize) throws NoSuchAlgorithmException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM); keyPairGenerator.initialize(keySize); return keyPairGenerator.genKeyPair(); } // 私钥解密 public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception { PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyText)); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] result = cipher.doFinal(Base64.getDecoder().decode(text)); return new String(result); } public static boolean isPassword(String password) { //密码规则为:长度8-20位,必须包含英文大小写,数字及特殊符号 String pattern = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*(\\)_+=\\[\\]{}|:,./<>?]).{8,20}$"; return Pattern.matches(pattern, password); } public static void main(String[] args) throws Exception{ System.out.println(isPassword("Srcb@1234")); // KeyPair keyPair = RSAUtils.generateKeyPair(1024); // PublicKey pubKey = keyPair.getPublic(); // PrivateKey priKey = keyPair.getPrivate(); // // String publicKey = RSAUtils.getPublicKey(pubKey); // String privateKey = RSAUtils.getPrivateKey(priKey); // // // System.out.println("publicKey:"+publicKey); // System.out.println("privateKey:"+privateKey); // // // try { // String usernameDecodeBuf = RSAUtils.decryptByPrivateKey("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDRp5vSEU5a37aHIq9pg/UOvQXVDuD9pYLk/x5sNFQx0dk+EPrfq7gBU6RAdjjaNS3vE9sa5ZGVAUC/pRKse0TDeeQVxFbP7g0J9og2idm0K7r4r9Y0In8Qf853JfhcMgOAns80uylVtkMpFfBXj9o367/ws7AjJ7AkN3y4vxP9lt5ub/vLCpnTtX0b+nFcnY9ETL2u4xLqOYV3qP1hwTpnpiewGmjyfzXieUYsuuT2KAL3PWkvETnly47kxrfyym02fHdIbNm8TCaxirjRHLs7J8PsRQE/XzKuZWzlzX0FjX/vJlKUP1OiszpodJXwWPG70bWh/TQwUe35ZjMYxnLtAgMBAAECggEAHyfELRxrQ2/ZRQ2veYOliBIo6rdyUd8lq3gKAlRoaprfqKyHS3POPUw7rWSkIDEk6VFPDxksYDM2dwRF2SHcXxwe++kYaX/bqi5boZcspeyVtV0T/N1feokzmlsnJDQ+dv+ilRh3FQinxFRBShHTgNnkxRU+yIqeT1N7kky64MUki6/OC8p1Vvabed86ce5y9SlDcutZ7DmaCmMKdfdQlw5ctzFKYMP8A8seN0Ow4IBnn5fwnMrzb4aUwzfCdHNfmtN99wtBM+2+da5a04K+l7siJWLHLlG4yzt3BXapX+MNgyF+3FNv+uDQXFOoh8CuTCaxJIDfn+8lcXe9bUdCtQKBgQD/cpnA8olMPjbhCKciS6ZuBOcrL+EUalQJn9Cwl3kba+x1Sgt/Whf3fohbJ6PZKZyAA/moTKxMwx+5JhS49wRvLsfCpS0AtFGPOgZLnjQkshDwnDwdAL0UAIkGpPJ1hb9K7xiisFx0qwff/6QbBqhiGk2uy6V10sEIhUfOAG0aTwKBgQDSG6j455R9C6beTcRiF9rmzDSV1GPjOc3Rvw4V02iswrZP3SkGnRlWa/RwrKqIkusjDwjDGXLg0i7Pkq2/DN0mHHFrNOUMmX/7tfOacNLSCN94YB+xZ6RgodCrTwg4I+ypfsdEVRDxQRd83eRbLL1p43e+TxMAjxGVPRjgqlmcAwKBgEVySXycM1ln/JF3QcDgIjH84T/rd1yOf6RSL3Ei7QjYcWN9qtyHiMZ/PuDRSQkr9+ERs5jep2UDEyfJw455kVoMtMAlGbP8UcQHeVirfO+Q/Wv8fZdA8SZz8sy8oTH0F4pusBriqXAKY0yxelLin3p0PjRMJwJ+Nn5zhY7qrL6fAoGBAMo9m7Ey4EhZLd8vxgeR5MBh8YADN77hxg7OM5WosEoTBn/rZvEZyOjZ8yl92oyptrJBZ3K8jUqAplRhYOLUVA66NCY4fP1ax8mXQ4v2a8eGiOyKwhb2p0/okj5DTasUUVp5UP+iTjObLyufPo7QiuZg8ML7xFO2YvtfGxIuhyDXAoGBALTMUJRFGwkYk5oDvA4oq07UHOEMn1OiUj3ggYAr1dzvJze7m+z9PmiZqPN2J+5kvPCsLe9d00jAG+4rvTT+3QnlUe5oW6kxM3uhOZEktLRAxsitHAfaLck78w7O8Jr45Yu78HyDQ9zHqoW8t12gxyqvytdIPzZTqW5XGyIoZ8Yt","SRPE/BUm/fk8uCyOjcvBYOiGWSpI3p2/Arndyx4m3GECVV4YG3t74zzw54zfvhO6IW8cZ86UGBqqpgeBOv6ajZz/696KtsLxI7VssgkwMSgY5i68V1mA6H98rw3wA/pJN0vOheKC3yAr1O3oyrOHX/KSGNPTu/HwkxgBPsvoXRR49yEx3G8rFL8w2H3j/zcgQiQXPR/g4Z2TTA6WqzIi2JlnwQQO5a381/OOy0Yuf+OQIrzD4DFYzbo3o+DVVfK27enigQVkjHf3dDmz37Yy4SB6/ftA5ThGQoOmAZ5kp/o51OjSr+DEUtbDuyIzQRIlono79se0AHraLUWXGUUBDw=="); // System.out.println(usernameDecodeBuf); // // } catch (UnsupportedEncodingException e) { // throw new RuntimeException(e); // } } } ``` 2、前端引用RAS.js加密 RSA.js下载地址:https://www.123pan.com/s/bV55Vv-zs5IA.html ```html
管理中心
后台管理系统
登录系统
登录
``` 3、后端接收RSA加密数据并用私钥解密 ```java /* * * * */ package com.cms.controller.admin; import java.util.HashMap; import com.cms.util.RSAUtils; import org.apache.commons.codec.digest.DigestUtils; import com.cms.Feedback; import com.cms.entity.Admin; import com.cms.routes.RouteMapping; /** * Controller - 管理员登录 * * * */ @RouteMapping(url = "/admindec/login") public class LoginController extends BaseController { /** * 登录 */ public void index() { render(getView("login/index")); } /** * 登录 */ public void login(){ String username = getPara("username"); String password = getPara("password"); if(!validateCaptcha("code")){ renderJson(Feedback.error("验证码错误!")); return; } String privateKey="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJyjXN/Bu9x9+ckKCWvrPohaZKj3FY0fmco6BXCMRUuq20Kqpw9rr/QxPC6A6o5Y/Quyjo4pNkpkz116TTu+a959e7x9nwP1kLDpkFBE3FalD89R734MsU4Bq4KMgR4aoJP+2vGnhAqEvhC35ctKfDO8kA7a7iN6JkNW+JhDq+O5AgMBAAECgYEAjX/aD1xQ28+FjUIe3rmlRMH7utNySYkpgZDGhzSACOnwppnIztpmGf88MXpN6YekGCQWOYArRispVHV+PaE4iVVUNbzXk+BwzgQmmhlwkG6HlVovzPttsD7ReaLvWo1zCGUNAy2WiZlSDuG6mBmPiY9LlW52o/poEPcRx5h4ot0CQQDzA4JlL3My9NFre7MJoh/Xw7d5ZCzpyYhYBhRlOohbnTXDQqRWyZCyFUB0AndrxTvIw+mgqJsGQvFvlrpJ9jjPAkEApQI2kjJpLnvUVQmrNgSvwEb8pNgz/+GsFnWOX/gXeFvsECYdR9SlAQc+Eosn0Lk2VkCblAOHKNoBE7s+VBCs9wJAB9euJpvQaO2TsJdOYNo1kt4DFszP0j+pwcV4dQfdjK9XI9ULvq1EmSqsaNIHjpfP5RvFd2TZk+snJYXEv0xN6wJBAJNOWH1HN5LhxPpteUTuBh/2v1BCGpnSUxhxtbqC9iDinukDvZwEf5Fdb9KKG+8/iPyTDNCkHaMgi1mcDNZrVJ0CQQDl6PpRuRkeBg6RTSd2uW8o/PHO+Qk7tLxLW1vHbFWBxrWXSNCEwaSJdWM3zSNpxxBw3tSVtwIejCi/woHi4tFS"; try { username = RSAUtils.decryptByPrivateKey(privateKey,username); password = RSAUtils.decryptByPrivateKey(privateKey,password); } catch (Exception e) { renderJson(Feedback.error("用户名密码错误!")); return; } if(!RSAUtils.isPassword(password)){ renderJson(Feedback.error("用户名密码错误!")); return; } Admin admin = new Admin().dao().findByUsername(username); if(admin==null){ renderJson(Feedback.error("用户名密码错误!")); return; } if(!admin.getPassword().equals(DigestUtils.md5Hex(password))){ renderJson(Feedback.error("用户名密码错误!")); return; } getSession().setAttribute(Admin.SESSION_ADMIN, admin); renderJson(Feedback.success(new HashMap<>())); } } ```
上一篇:
springboot jar包
下一篇:
FastJson json转m
相关阅读
后台出现弹框“ 请输入授权码“
linux scp命令并指定端口
宝塔部署Java系统(不与PHP冲突)
此网站无法提供安全连接(客户端和服务器不支持一般 SSL 协议版本或加密套件。)--TLS 1.1/TLS 1.2配置
linux 安装jdk 8u351
Idea启动报错:java.lang.NoClassDefFoundError: com/jfinal/server/jetty/ServerFactory
富文本上传文件出现“ 文件格式不允许 ”
postgresql 用户postgres 密码修改并配置必须密码登录
QQ在线咨询
售前客服
微信客服
工作日 9:00-18:00