本文使用1.57的BC库,最新BC库可能写法有所变动
密码杂凑算法是3类基础密码算法之一,它可以将任意长度的消息压缩成固定长度的摘要,主要用于数字签名和数据完整性保护等.SM3密码杂凑算法的消息分组长度为512 b,输出摘要长度为256 b.该算法于2012年发布为密码行业标准(GM/T 0004—2012),2016年发布为国家密码杂凑算法标准(GB/T 32905—2016).总结了SM3密码杂凑算法的设计原理,算法特点,软硬件实现和安全性分析,同时将SM3密码杂凑算法和国际通用杂凑算法在实现效率和安全性方面进行比较.
人们普遍使用MD5来生成摘要信息,随着王小云及其他后续研究,碰撞攻击可以在数秒内完成。而SM3则是王小云破解MD5后设计的一种中国密码散列标准。
依赖信息
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.57</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.57</version>
</dependency>
/**
* 使用国密SM3生成信息摘要
* @param content
* @return 返回16进制字符串
*/
public static String digest(String content) {
byte[] data = content.getBytes();
SM3Digest digest = new SM3Digest();
digest.update(data, 0 , data.length);
byte[] encrypt = new byte[digest.getDigestSize()];
digest.doFinal(encrypt, 0);
String digestResult = Hex.toHexString(encrypt);
return digestResult;
}