加密策略

v一、前言

  这两天研究了一下项目中的密码加密,可以说得上是学到了很多。下面来大致说一下。

v二、常用加密

  1.单向加密算法

  单向加密算法主要用来验证数据传输的过程中,是否被篡改过。

  • BASE64 严格地说,属于编码格式,而非加密算法

  • MD5(Message Digest algorithm 5,信息摘要算法)

  • SHA(Secure Hash Algorithm,安全散列算法)

  • HMAC(Hash Message Authentication Code,散列消息鉴别码

     2.对称和非对称加密算法
    对称和非对称加密算法主要采用公钥和私钥的形式,来对数据加密。
  • DES(Data Encryption Standard,数据加密算法)

  • PBE(Password-based encryption,基于密码验证)

  • RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

  • DH(Diffie-Hellman算法,密钥一致协议)

  • DSA(Digital Signature Algorithm,数字签名)

  • ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

 

  参考:Java中的各种加密算法   聊一聊MD5   各种Java加密算法

v三、项目中的加密策略

  创建用户:同一默认密码处理,用户登录时要修改密码。获取到默认密码之后先进行一次sha1加密,然后根据user code 和 salt进行第二次sha1加密存入数据库。

  校验用户:用户登录时,js处理密码。首先进行一次sha1加密,然后进行一次rsa加密(需要向后台请求ras公钥的modulus 和 exponent)。后台通过rsa公钥对应的私钥进行解密,然后根据user code进行找到对应的用户,通过user code 和 salt进行sha1加密,将得到的结果和数据库中的进行对比。

v四、代码

  js sha1算法加密(sha1.js)

  View Code

  encrypt.js

复制代码
var sha1 = require ('xxx/sha1.js');

function _encrypt(jsSHA) {
    var encrypt = function(string){
        var shaObj = new jsSHA("SHA-1", "TEXT");
        shaObj.update(string);
        var hash = shaObj.getHash("HEX");
        return hash;
    }
    return encrypt;
}

const encrypt = _encrypt(sha1)

export default encrypt;
复制代码

  js rsa 算法加密(security.js)

  View Code

   前端加密示例

复制代码
import RSAUtils from 'xxx/security';
import encrypt from 'xxx/encrypt';

plainPassword = encrypt(plainPassword);

var key = RSAUtils.getKeyPair(exponent, '', modulus);
var encryptedPwd = RSAUtils.encryptedString(key, plainPassword);
复制代码

 

  java rsa 算法(RSAUtils.java)

  View Code

  java rsa 公钥获取(传递给前端)

  View Code

  java sha 算法(PasswordUtils.java)

  View Code

  后端校验示例

复制代码
//获取到前端传递的密码参数
password = RSAUtils.decryptStringByJs(password);

//根据usercode 获取到用户 user
String checkPwd = PasswordUtils.encodePasswordByUserCode(password, user.getSalt(), user.getUserCode());

assert checkPwd.equals(user.getUserPassword())
复制代码

  后端加密示例

UserBaseVO vo = (将要新增的用户);
PasswordUtils.setSalt(vo);
String shaPassword = PasswordUtils.encodePasswordUsingSHA(vo.getUserPassword());
vo.setUserPassword(shaPassword);
vo.setUserPassword(PasswordUtils.encodebyUserCode(vo));









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/6478003.html,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值