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

专门做物业催收的网站nginx设置wordpress伪静态

专门做物业催收的网站,nginx设置wordpress伪静态,wordpress只显示文本摘要,建设工程培训1.背景 做数据采集#xff0c;客户需要把他们那边的数据库连接信息存到我们系统里#xff0c;那我们系统就要尽可能的保证这部分数据安全#xff0c;不被盗。 2.我的思路 1.需要加密的地方有两处#xff0c;一个是新增的时候前端传给后端的时候#xff0c;一个是存到数…1.背景 做数据采集客户需要把他们那边的数据库连接信息存到我们系统里那我们系统就要尽可能的保证这部分数据安全不被盗。 2.我的思路 1.需要加密的地方有两处一个是新增的时候前端传给后端的时候一个是存到数据库 2.与前端交互时的加密方式肯定和存到数据库的加密方式不同为了安全 3.接收前端传值这块好说跟前端约定一个加密方式约定一个盐 4.存到数据库怎么加密解密 麻烦得点就在于存到数据库这里 我是针对每一条数据都会生成一个uuid然后nacos配置文件中还有一个盐salt 然后我把uuid和salt用特殊符号拼接之后再进行一次加密形成最终盐 finalSalt 再用finalSalt对密码进行加密把密文密码存到数据库 如果用户对密码进行修改那就重新生成一个uuid再重新加密存储密文 之所以设计这么麻烦就是增加解密得困难度想要明文只有同时拿到数据库数据nacos配置以及我的java代码才能解密尽可能保障密码得安全性 5.密码可为空 这一点我是纠结了一会因为在产品设计上密码是可为空得如果我不把密码返回给前端那前端保存得时候如果用户没修改密码前端上传给我得也会是空那这个时候我就不知道到底是用户把密码改为空了还是说他根本没有动密码这个文本框 所以我就把密文密码返回了让他保存到时候再按照前后端约定加密传输给我 我接收到之后先按照前后端约定得解密再去和数据里边密文对比 如果一致说明没改 如果不一致说明修改了并且解密出来的是明文密码我会对明文密码按照4中说的再进行加密 但是把密文密码传给前端始终是个不太安全得事情 我后来想到一点前端是可以识别到用户是否动过密码这个文本框得 那我就不把密码返回给前端了 可以让前端给我一个标识true就代表动过文本框 如果现在上传得密码为空且动过文本框那我就直接把密码字段保存为空即可。 如果现在上传得密码为空但是false没动过文本框那我就不更新密码这个字段 如果现在上传密码不为空那就不管true还是false了密码肯定修改了就先按照前后端解密再按照数据库加密即可 3.加解密工具类 这是针对数据库那一部分 博客上是前后端约定的那一部分 【精选】java前后端加密解密crypto-js_java crypto-CSDN博客 import org.apache.commons.codec.binary.Base64; import org.springframework.util.StringUtils;import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.*;/*** Description: 加密解密* Version 1.0*/ public class SecretUtil {/*** 用uuid加密** param UUID* param salt 盐 从nacos配置中取值* param password 明文密码* return*/public static String encryptUUID(String UUID, String salt, String password) {if (!StringUtils.hasText(UUID) || !StringUtils.hasText(salt) || !StringUtils.hasText(password)) {return null;}//先把uuid和salt再进行一次加密String concat UUID.concat(salt);byte[] bytes base64Encrypt(concat);//再对明文密码进行加密return encrypt(password, bytes);}/*** UUID解密** param UUID* param salt 盐 从nacos配置中取值* param password 密文密码* return*/public static String decryptUUID(String UUID, String salt, String password) {if (!StringUtils.hasText(UUID) || !StringUtils.hasText(salt) || !StringUtils.hasText(password)) {return null;}//先把uuid和salt再进行一次加密String concat UUID.concat(salt);byte[] bytes base64Encrypt(concat);//再对明文密码进行加密return decrypt(password, bytes);}/*** base64加密** param content 待加密内容* return byte[]*/public static byte[] base64Encrypt(final String content) {return java.util.Base64.getEncoder().encode(content.getBytes());}/*** base64解密** param encoderContent 已加密内容* return byte[]*/public static byte[] base64Decrypt(final byte[] encoderContent) {return java.util.Base64.getDecoder().decode(encoderContent);}/*** 加密** param data 待加密内容* param bytes 盐的base64* return*/public static String encrypt(String data, byte[] bytes) {byte[] dataByte data.getBytes(StandardCharsets.UTF_8);try {KeyGenerator keyGenerator KeyGenerator.getInstance(AES);SecureRandom secureRandom SecureRandom.getInstance(SHA1PRNG);secureRandom.setSeed(bytes);//这个128要特别注意 对长度有要求的keyGenerator.init(128, secureRandom);SecretKey secretKey keyGenerator.generateKey();Cipher cipher Cipher.getInstance(AES/ECB/PKCS5Padding);cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encrypted cipher.doFinal(dataByte);// 加密return java.util.Base64.getEncoder().encodeToString(encrypted);} catch (Exception e) {throw new RuntimeException(e);}}/*** 解密** param data 待解密内容* param bytes 盐的base64* return*/public static String decrypt(String data, byte[] bytes) {try {KeyGenerator keyGenerator KeyGenerator.getInstance(AES);SecureRandom secureRandom SecureRandom.getInstance(SHA1PRNG);secureRandom.setSeed(bytes);//这个128要特别注意 对长度有要求的keyGenerator.init(128, secureRandom);SecretKey secretKey keyGenerator.generateKey();Cipher cipher Cipher.getInstance(AES/ECB/PKCS5Padding);cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey.getEncoded(), AES));//采用base64算法进行转码避免出现中文乱码byte[] encryptBytes Base64.decodeBase64(data);byte[] decryptBytes cipher.doFinal(encryptBytes);return new String(decryptBytes);} catch (Exception e) {throw new RuntimeException(e);}}}4.代码混淆 这块可以不看是中间调研走过的一个弯路 因为java的class文件可以反编译所以我想让编译之后的代码变成01001那种无法识别的语言 但是发现java代码混淆并不能达成这个效果 但是毕竟走了一天弯路还是记录下吧 4.1先看效果 4.2再上代码 从这下载吧 https://download.csdn.net/download/qq_35653822/88554123 里边有个字典可以实现把包名类名变量名混淆为0o00o这种方式 5.不可逆算法 目前接触到的存登录密码是不可逆算法用的是security自带的加密 security提供了match方法可以对比输入的密码和数据库中是否一致返回true或者false但是不提供解密方法 除非管理员可以一键重置用户的密码把用户密码重置成初始化默认密码 存数据库里边的长这样谁也看不出来存的是啥 这种方法固然安全但是对于我们1中说的需求不适合这种算法因为我们使用对方数据库的时候肯定要获取这个密码进行连接 public static String irreversibleEncrypt(String password) {BCryptPasswordEncoder passwordEncoder new BCryptPasswordEncoder();//加密 每次调用加密方法 返回的结果都不同return passwordEncoder.encode(password);}/*** 对比* 不可逆算法 不能解密 只能对比** param oldPassword 未加密密码 如123456* param requestPassword 加密后的密码* return*/public static boolean irreversibleMatch(String oldPassword, String requestPassword) {BCryptPasswordEncoder passwordEncoder new BCryptPasswordEncoder();//对比return passwordEncoder.matches(oldPassword, requestPassword);} 6.不对称算法 这个什么时候使用就看具体场景吧 7.keystore Java密码术 - 存储密钥( Storing keys)_学习Java密码学|WIKI教程 这个同事调研过结论是不适合我们我没仔细研究
http://www.pierceye.com/news/762298/

相关文章:

  • 制作网页的网站费用属于资本性支出吗安徽区块链虚拟币网站开发方案
  • 做网站前产品经理要了解什么搜索引擎优化免费
  • 广州网站建设技术方案营销网站推广策略
  • 郑州网站建设、中国菲律宾铁路项目
  • 潜江网站开发学校网站建设领导小组
  • 桂林临桂区建设局网站厦门 微网站建设公司哪家好
  • 如何用云服务器搭建个人网站有些人做网站不用钱的,对吗?
  • 月嫂网站建设方案建设网站询价对比表模板
  • 医院网站建设 价格低深圳市高端网站建设
  • 太原做学校网站的公司网站免费观看
  • 企业网络营销是什么seo教程百度云
  • wordpress 下载站模板高清免费观看电视网站
  • 网站后期维护怎么做招c1驾驶员300元一天
  • 番禺区移动端网站制作山西省两学一做网站
  • 网上销售 网站建设浙江创都建设有限公司网站
  • 网站商城的公司运营结构html5 app开发工具
  • 酒类网站建设方案案中山网站建设公司排名
  • wordpress怎么做子页面如何刷seo关键词排名
  • 网站怎样做免费优化有效果成都十大好的装修公司
  • 网站外链分析工具新闻发布会主持词
  • 网站开发哪个工具学做网站需要懂什么
  • 一般做推广网站的客户需求仕什么赣州市城乡建设局官方网站
  • 中山网站搜索引擎优化婚庆策划公司的商业模式
  • 百度云主机做网站天津展示型网站建设外包
  • 做公司网站利润营销型企业网站系统模板下载
  • 怎样在绍兴e网做网站衡水网站优化
  • 网站建设现在还有没有市场优秀网站建设报价
  • 兰州网站维护公司网站规划有哪些内容
  • 简单展示网站模板电脑网页打不开
  • 陕西省建设局网站手把手教 个人网站开发