JAVA加解密算法设计与应用

Wesley13
• 阅读 366

业务场景

APP移动端、WEB、桌面端、第三方平台

密码等敏感数据加密设计

如 app端登录密码加密设计

对于登录密码 不需要进行解密 只需要加密算法结合规则进行比较 就能得到密码正确与否

方法一(签名保证安全)

  1. 密码等敏感信息取Md5值 对所有值(加上timestamp)排序后 取SHA256哈希值(十六进制字符串) 作为签名
  2. 后台验证签名
  3. 对password(进行过一次Md5) 进行Md5Hash(加上salt),得到真正密码(依赖shiro包)

案例

登录签名流程:(账号密码登录) 用户名登录或手机号与密码登录

  1. 用户名或手机号 username (A)、密码 password(B)、时间戳 timestap(D)
  2. MD5(B) = E
  3. A 、D、E 分组排(冒泡)序后产生 A1、D1、E1
  4. SHA256(A1+D1+E1) = F
  5. A、D、E、F 发送给服务器端
  6. 服务端按照按照(3)(4) 生成 G,与 F进行比较

方法二(数据加密保证安全)

登录名+密码+salt = A ,数据库Md5Hash(A) 依赖shiro包

方法三(数据加密保证安全)

RSA加密结合AES加密算法的对称加解密方案 ,风险是速度慢导致性能差(密码用AES加密 保证不传输明文 同时AES密钥可以有RSA加密 保证传输安全)

方法四(签名保证安全)

网关服务如调度系统对接口参数进行签名校验,签名算法可以使用sdk提供给外部系统 每个外部系统分配唯一的appId和appKey并提供给第三方系统 具体服务则根据sdk算法得到签名与外部接口传入的签名进行对比

常用算法

常用加密、解密算法 Hash Base64 Md5 SHA256 RSA AES hmacsha1

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
1年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
Java通过BCrypt加密
<divid"cnblogs\_post\_body"class"blogpostbody"<div一、概述</div<p&nbsp;</p<p在用户模块,对于用户密码的保护,通常都会进行加密。我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
5个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为