• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java sm3加密算法的实现

java 搞代码 4年前 (2022-01-05) 9次浏览 已收录 0个评论

这篇文章主要介绍了Java sm3加密算法的实现,帮助大家更好的利用Java进行加密,感兴趣的朋友可以了解下

1.准备工作

  所需jar包:

  bcprov-jdk15on-1.59.jar
  commons-lang3-3.1.jar

  对应的maven依赖

 <!--sm3,sm4加密算法--> org.bouncycastlebcprov-jdk15on1.66
 import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.macs.HMac; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; import java.io.UnsupportedEncodingException; import java.security.Security; import java.util.Arrays; 
 /** * sm3<span style="color:transparent">来源gaodai#ma#com搞*!代#%^码网</span>加密算法工具类 * @explain 加密与加密结果验证(不可逆算法) * @author Marydon * @creationTime 2018年7月5日上午10:01:24 * @version 1.0 * @since * @email [email protected] */ public class Sm3Utils { private static final String ENCODING = "UTF-8"; static { Security.addProvider(new BouncyCastleProvider()); } } 

2.SM3加密

  方式一:不提供密钥

 /** * sm3算法加密 * @explain * @param paramStr *      待加密字符串 * @return 返回加密后,固定长度=32的16进制字符串 */ public static String encrypt(String paramStr){ // 将返回的hash值转换成16进制字符串 String resultHexString = ""; try { // 将字符串转换成byte数组 byte[] srcData = paramStr.getBytes(ENCODING); // 调用hash() byte[] resultHash = hash(srcData); // 将返回的hash值转换成16进制字符串 resultHexString = ByteUtils.toHexString(resultHash); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return resultHexString; } /** * 返回长度=32的byte数组 * @explain 生成对应的hash值 * @param srcData * @return */ public static byte[] hash(byte[] srcData) { SM3Digest digest = new SM3Digest(); digest.update(srcData, 0, srcData.length); byte[] hash = new byte[digest.getDigestSize()]; digest.doFinal(hash, 0); return hash; }

  方式二:自定义密钥

 /** * 通过密钥进行加密 * @explain 指定密钥进行加密 * @param key *      密钥 * @param srcData *      被加密的byte数组 * @return */ public static byte[] hmac(byte[] key, byte[] srcData) { KeyParameter keyParameter = new KeyParameter(key); SM3Digest digest = new SM3Digest(); HMac mac = new HMac(digest); mac.init(keyParameter); mac.update(srcData, 0, srcData.length); byte[] result = new byte[mac.getMacSize()]; mac.doFinal(result, 0); return result; }

3.加密数据校验

 /** * 判断源数据与加密数据是否一致 * @explain 通过验证原数组和生成的hash数组是否为同一数组,验证2者是否为同一数据 * @param srcStr *      原字符串 * @param sm3HexString *      16进制字符串 * @return 校验结果 */ public static boolean verify(String srcStr, String sm3HexString) { boolean flag = false; try { byte[] srcData = srcStr.getBytes(ENCODING); byte[] sm3Hash = ByteUtils.fromHexString(sm3HexString); byte[] newHash = hash(srcData); if (Arrays.equals(newHash, sm3Hash)) flag = true; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return flag; } 

4.测试

 public static void main(String[] args) { // 测试二:json String json = "{\"name\":\"Marydon\",\"website\":\"http://www.cnblogs.com/Marydon20170307\"}"; String hex = Sm3Utils.encrypt(json); System.out.println(hex);// 0b0880f6f2ccd817809a432420e42b66d3772dc18d80789049d0f9654efeae5c // 验证加密后的16进制字符串与加密前的字符串是否相同 boolean flag = Sm3Utils.verify(json, hex); System.out.println(flag);// true }

以上就是Java sm3加密算法的实现的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java sm3加密算法的实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址