当前位置: 首页 > news >正文

外链是不是把自己的网站信息发布到别人的网站上?北京自考网官方网站

外链是不是把自己的网站信息发布到别人的网站上?,北京自考网官方网站,浏览器怎么打开网站服务器连接,芜湖seo外包公司1.问题 账密登录方式中用户输入密码后#xff0c;把账号、密码通过http传输到后端进行校验#xff0c;然而密码属于敏感信息#xff0c;不能以明文传输#xff0c;否则容易被拦截窃取#xff0c;因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式#xff0c;r…1.问题 账密登录方式中用户输入密码后把账号、密码通过http传输到后端进行校验然而密码属于敏感信息不能以明文传输否则容易被拦截窃取因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式rsa属于非对称加密特点就是公钥加密私钥解密 2.1后端生成公钥私钥 生成公私钥把公钥返回给前端私钥用redis缓存 ManagerController.java GetMapping(/key)public ResponseEntityApiResponse key(RequestParam(loginNo) String loginNo) {String key managerService.generateKey(loginNo);return ApiResponse.success(key);}ManagerServiceImpl.java Overridepublic String generateKey(String loginNo) {QueryWrapperManager wrapper new QueryWrapper();wrapper.eq(loginNo, loginNo);Manager entity this.getOne(wrapper);if (Objects.isNull(entity)) {throw new CodeException(用户不存在loginNo loginNo);}try {KeyPair keyPair RSAUtil.generateKeyPair();String publicKey RSAUtil.getPublicKey(keyPair);String privateKey RSAUtil.getPrivateKey(keyPair);log.info(publicKey{}, publicKey);log.info(privateKey{}, privateKey);String redisKey RedisKey.MANAGE_LOGIN_RSA_PRIVATEKEY $ loginNo;// 清除缓存redisService.del(redisKey);// 私钥添加到缓存redisService.set(redisKey, privateKey, 5, TimeUnit.MINUTES);return publicKey;} catch (Exception e) {log.error(生成rsa密钥失败, e);}return null;}RSAUtil.java public class RSAUtil {private static final Charset CHARSET StandardCharsets.UTF_8;private static final String ALGORITHM RSA;/*** 生成密钥对* return* throws NoSuchAlgorithmException*/public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance(ALGORITHM);keyPairGenerator.initialize(1024);return keyPairGenerator.generateKeyPair();}/*** 生成公钥* param keyPair* return*/public static String getPublicKey(KeyPair keyPair) {PublicKey publicKey keyPair.getPublic();byte[] bytes base64Encode(publicKey.getEncoded());return new String(bytes, CHARSET);}/*** 生成私钥* param keyPair* return*/public static String getPrivateKey(KeyPair keyPair) {PrivateKey privateKey keyPair.getPrivate();byte[] bytes base64Encode(privateKey.getEncoded());return new String(bytes, CHARSET);}/*** base64加密* param bytes* return*/public static byte[] base64Encode(byte[] bytes) {return Base64.getEncoder().encode(bytes);}/*** base64解密* param bytes* return*/public static byte[] base64Decode(byte[] bytes) {return Base64.getDecoder().decode(bytes);}/*** base64解密* param src* return*/public static byte[] base64Decode(String src) {return Base64.getDecoder().decode(src);}/*** 解密* param key* param data* return* throws NoSuchAlgorithmException* throws InvalidKeySpecException* throws NoSuchPaddingException* throws InvalidKeyException* throws IllegalBlockSizeException* throws BadPaddingException*/public static String decrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {byte[] bytes base64Decode(key);PKCS8EncodedKeySpec pkcs8EncodedKeySpec new PKCS8EncodedKeySpec(bytes);KeyFactory keyFactory KeyFactory.getInstance(ALGORITHM);PrivateKey privateKey keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher Cipher.getInstance(RSA/ECB/PKCS1Padding);cipher.init(Cipher.DECRYPT_MODE, privateKey);return new String(cipher.doFinal(base64Decode(data.getBytes(CHARSET))), CHARSET);}2.2前端使用公钥加密 安装这个依赖 npm install jsencrypt3.2.0import JSEncrypt from jsencrypt;// key为后端返回的公钥this.form.password为明文密码 const jsEncrypt new JSEncrypt(); jsEncrypt.setPublicKey(key); // pwd为加密后的密码 var pwd jsEncrypt.encrypt(this.form.password);2.3后端使用私钥解密 从redis获取私钥用私钥解密得到明文后和数据库保存的密码比对数据库的密码是以用户id为盐值对明文密码作md5加密相同则放行否则报错注意登录成功的话需要把redis的密钥移除 ManagerController.java PostMapping(/login)public ResponseEntityApiResponse login(RequestParam(loginNo) String loginNo, RequestParam(password) String password)throws Exception {UserDTOWithToken dto managerService.login(loginNo, password);return ApiResponse.success(dto);}ManagerServiceImpl.java Overridepublic UserDTOWithToken login(String loginNo, String password) throws Exception {QueryWrapperManager wrapper new QueryWrapper();wrapper.eq(loginNo, loginNo);Manager entity this.getOne(wrapper);if (Objects.isNull(entity)) {throw new CodeException(用户不存在loginNo loginNo);}String redisKey RedisKey.MANAGE_LOGIN_RSA_PRIVATEKEY $ loginNo;// 从缓存获取私钥String privateKey (String) redisService.get(redisKey);if (StrUtil.isEmpty(privateKey)) {throw new CodeException(私钥不存在);}// 用私钥解密String realPassword RSAUtil.decrypt(privateKey, password);log.info(realPassword{}, realPassword);// 校验密码Digester digester new Digester(DigestAlgorithm.MD5);digester.setSalt(entity.getId().getBytes(StandardCharsets.UTF_8));String encodePassword digester.digestHex(realPassword);log.info(encodePassword{}, encodePassword);if (!encodePassword.equals(entity.getPassword())) {throw new CodeException(密码错误);}//从认证服务获取tokenResponseEntityApiResponse responseEntity authClient.token(AuthConst.PASSWORD_GRANT_TYPE, AuthConst.ADMIN_CLIENT_ID,AuthConst.ADMIN_CLIENT_SECRET, null, loginNo, password);ApiResponse response responseEntity.getBody();TokenDTO tokenDTO response.toObject(TokenDTO.class);if (Objects.isNull(tokenDTO)) {throw new CodeException(获取token失败 response.getMessage());}UserDTOWithToken dto new UserDTOWithToken();dto.setUserId(entity.getId());dto.setToken(tokenDTO);entity.setLoginTime(LocalDateTime.now());Integer loginCount entity.getLoginCount();entity.setLoginCount(Objects.isNull(loginCount) ? 1 : loginCount 1);entity.setUpdateTime(LocalDateTime.now());this.updateById(entity);// 成功则清除缓存的私钥redisService.del(redisKey);return dto;}3.总结 非对称加密还有其它算法rsa是其中一种 后端存储私钥除了redis也可以用其它缓存工具如J2Cache
http://www.zqtcl.cn/news/210388/

相关文章:

  • 网站建设与维护案列网站作品怎么做
  • 茂名放心营销网站开发seo收费
  • 旅游网站品牌建设本地使用宝塔安装wordpress
  • 专门做外链的网站制作论坛类网站模板免费下载
  • 靖江建设行业协会网站投资做网站
  • 做网站视频背景潍坊网站制作建设
  • 深圳市官网网站建设哪家好百度抓取网站登录
  • 免费做cpa单页网站友情链接买卖代理
  • 免费网站建站排名中国最大的软件公司
  • 码云pages做静态网站广西建设培训网
  • 建设网站需要花钱吗网站seo方案策划书
  • 德阳网站怎么做seo陈木胜个人资料
  • 电子规划书商务网站建设wordpress主机推荐
  • wordpress设置多站点html5开发手机app
  • 移动互联和网站开发哪个好做推广便宜的网站有哪些
  • 极速网站建设定制价格微信公众号运营助手
  • .net制作网站开发教程在线修图编辑器
  • 哪些网站可以做详情页聊城高新区建设局网站
  • 湖南网站优化代运营山东建设厅证件查询网址
  • 以百度云做网站空间浙江外贸网站建设
  • 南通网站建设推广专家wordpress 信息流 主题
  • 网站培训机构有哪些大学生做企业网站
  • 网站培训班有哪些课程做的好的大学生旅行有哪些网站好
  • 昌江县住房和城乡建设局网站佛山建设网站制作
  • 做网站 图片 文件夹 放哪儿北京模板网站建设
  • 网站制作公司哪家正规注册工程公司名称大全
  • 佛山微信网站建设哪家好做电商讲师课程的网站
  • 泰州城乡建设网站深圳logo设计公司哪家好
  • 东阳网站建设yw81wordpress登录注册页面梅花
  • 网站备案 厦门福州企业网站开发