加密策略

简介:

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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 大数据 API
大数据隐私保护策略:加密、脱敏与访问控制实践
【4月更文挑战第9天】本文探讨了大数据隐私保护的三大策略:数据加密、数据脱敏和访问控制。数据加密通过加密技术保护静态和传输中的数据,密钥管理确保密钥安全;数据脱敏通过替换、遮蔽和泛化方法降低敏感信息的敏感度;访问控制则通过用户身份验证和权限设置限制数据访问。示例代码展示了数据库、文件系统和API访问控制的实施方式,强调了在实际应用中需结合业务场景和平台特性定制部署。
65 0
|
1天前
|
算法 Serverless 数据安全/隐私保护
密钥的使用和安全性
【5月更文挑战第13天】密钥的使用和安全性
7 1
|
5月前
|
算法 安全 Go
C/C++ 常用加密与解密算法
计算机安全和数据隐私是现代应用程序设计中至关重要的方面。为了确保数据的机密性和完整性,常常需要使用加密和解密算法。C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现。本文将介绍一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、AES、MD5、SHA256、RSA等。
82 1
C/C++ 常用加密与解密算法
|
11月前
|
数据安全/隐私保护
bycrypt 加密和校验
bycrypt 加密和校验
89 0
|
数据安全/隐私保护
HMACSHA加密方法
HMACSHA加密方法
100 0
|
算法 数据安全/隐私保护
一款数据加密共享与签名方案
最近在研究区块链的时候关注了一下加密技术,小有心得,于是设计了一款数据加密共享与签名的方案,希望能够为做电子合同,数据存证,数据共享的朋友有所帮助吧。 业务场景 一、电子合同 Alice和Bob需要签订一个合同,而Charlie是中介,也需要在看到该合同上并签字,而Dave是外人,不参与这个合同的签订,所以不允许看到合同的内容。
1234 0
|
安全 算法 数据安全/隐私保护
|
安全 算法 数据安全/隐私保护
|
安全 算法 数据安全/隐私保护