SM3加盐使用实例使用介绍

环境:java的运行环境 以及添加包含SM3的包(我这里使用的是bouncycastle的jar)

什么要加盐:当hash算法的强碰撞和弱碰撞都保证了的时候,我们还是可以使用彩虹表去"碰撞",从而导致口令泄露,为了防止这一情况,我们可以使用加盐操作,即不是单纯的对口令进行hash然后就存入数据库,而是构造一个盐值来和口令进行混合再进行hash。这样就可以避免彩虹表碰撞的问题了。

话不多说上代码:


```javaimport java.security.SecureRandom;
import java.util.Scanner;import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.util.encoders.Hex;public class TestForSM3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你的密钥:(以回车结束)");String passwdString=sc.next();byte[]  resultString=pwdSaltedHashValue(passwdString);//计算结果转16进制String resultHexString= Hex.toHexString(resultString);System.out.println("口令加盐后的SM3散列值:"+resultHexString);}public static byte[] pwdSaltedHashValue(String passwdString) {  /** 随机生成128位的随机数*/SecureRandom random = new SecureRandom();byte bytes1[] = new byte[16]; random.nextBytes(bytes1);/** 加盐:即随机数和口令组合*/byte passwdbyte[]= arraycat(bytes1,passwdString.getBytes());//SM3计算SM3Digest mdDigest=new SM3Digest();mdDigest.update(passwdbyte,0,passwdbyte.length);byte[] result=new byte[mdDigest.getDigestSize()];mdDigest.doFinal(result, 0);return result;}/** 拼接buf1和buf2数组*/public static byte[] arraycat(byte[] buf1,byte[] buf2){byte[] bufret=null;int len1=0;int len2=0;if(buf1!=null)len1=buf1.length;if(buf2!=null)len2=buf2.length;if(len1+len2>0)bufret=new byte[len1+len2];if(len1>0)System.arraycopy(buf1,0,bufret,0,len1);if(len2>0)System.arraycopy(buf2,0,bufret,len1,len2);return bufret;} }
  稍微对上面的原理进行解释:  我们选择盐值的时候,选的是128位的密码学安全的随机byte串。事实上我们这里的盐值的长度选择最好是256位,因为SM3的位数就是256,更长的盐值是不必要的。

国产SM3hash算法加盐使用实例相关推荐

  1. 基于java注册登录MD5算法加盐加密颁发 Token身份令牌使用各种邮箱发送验证码详解雪花算法

    目的作用 == 在项目中,为了防止别人窥视我们的密码通常我们会采取一些加密方式.这里简单介绍一下MD5 加盐加密方法,MD5叫做信息-摘要算法,严格来说不是加密方式,而是信息摘要. 对于可以接触到数据 ...

  2. C++实现MD5摘要算法加盐salt值

    C++实现MD5摘要算法加盐salt值 1.信息摘要函数 1.1Hash函数 哈希函数就是能将任意长度的数据映射为固定长度的数据的函数.哈希函数返回的值被叫做哈希值.哈希码.散列,或者直接叫做哈希. ...

  3. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

  4. 国产加密实际运用:使用SM3加盐存储密码,并且使用SM2进行登录认证

    目录 1.简要 2.开发环境及工具 3.后台密码加密部分 3.1加密代码 3.2 SM3加密类(Sm3crypto) 3.3国密SM3工具类(Sm3Utils) 3.4国密相关依赖包 4.登录认证部分 ...

  5. mysql 加盐_【mysql】当加盐算法需要改变,数据库该如何更新?

    假设网站上有大量的注册用户,因为某些情况需要改变用户密码的加盐算法,那么数据库里的用户信息该怎么更新? 我想到的方法是:新增一个字段,新的加盐算法正式上线后,用户第一次成功登录时就把新的加盐后的值存到 ...

  6. java加盐_Java中MD5加密加盐算法

    前俩天项目组需要做一个密码的加密加盐操作,无意中在网上看到一个对应的加密加盐算法,特意在此做一个记录 import java.security.MessageDigest; import java.u ...

  7. Python项目-Day26-数据加密-hash加盐加密-token-jwt

    Python项目-Day26-数据加密-hash加盐加密-token-jwt 数据加密 import hashlibpwd='a123456' #sha1的参数必须是二进制 temp=hashlib. ...

  8. Java安全学习笔记(八)-使用加盐技术防范字典式攻击

    口令被轻松攻击的主要原因在于口令过短或者过于简单.如果口令很长,则计算所有组合的消息摘要可能要成百上千年,这将大大加大了生成字典的难度.同时口令过长也会给用户带来不便记忆的麻烦,因此用户使用的口令长度 ...

  9. 【项目】MD5加盐源码理解

    1.shiro中主要的类 简单看一下即可,shiro是一个安全验证框架,相对Spring security使用更为简单.本篇文章使用的的md5加密和加盐是基于shiro框架. 复制代码 主要功能:认证 ...

最新文章

  1. 从C到C++过渡的3个原因
  2. Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools解决方案
  3. VRRP协议介绍--转
  4. 北京理工大学珠海学院专业计算机类,北京理工大学珠海学院计算机学院网络工程专业...
  5. 使用jmeter 上传文件
  6. Qt Model/View/Delegate浅谈 - QAbstractListModel
  7. TensorFlow相关的一些技巧
  8. java 进制转换 栈 链表_c语言链表栈实现进制转换
  9. 2021-08-21 mvc架构
  10. 实验一. 路由器IP地址配置及直连网络
  11. 2020牛客暑期多校训练营(第八场)A.All-Star Game(线段树+带撤销并查集)
  12. 如何设置最美的win11桌面(附隐藏任务栏方法)
  13. android时间格式化
  14. 动手实践,使用div盒子模型设计一个播放器效果/动手实践
  15. 算法竞赛入门经典 例题6-21
  16. 微软开源!世界首个AI量化投资平台 Qlib 基本使用教程
  17. 【pcre 依赖】linux安装pcre 依赖
  18. 带你开发类似Pokemon Go的AR游戏(2)
  19. 国内的程序员(软件工程师)这一职业,是吃青春饭的吗?
  20. 智能网关与服务器连接简介

热门文章

  1. 用 GitBook 编写自己第一本电子书 —— GitBook 的安装和使用
  2. 华为p40android auto怎么用,华为手机无线投屏到车载导航,华为车机互联教程
  3. 基于 xNet 通信框架搭建的简易分布式系统 Demo ~~
  4. linux命令grep搜索倒序输出,Linux下的grep搜索命令详解(一)
  5. HDU 3507 Print Artical
  6. 泰拉瑞亚测试速度的软件,泰拉瑞亚移动速度最快的道具排名
  7. 求助c语言文件保存读取问题
  8. Libreoffice online集成开发
  9. OPC与OPC UA
  10. 嵌入式平台选择:树莓派 or BeagleBone Black(BBB)