SM3和SM4密钥

这篇具有很好参考价值的文章主要介绍了SM3和SM4密钥。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 概述

国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2SM3SM4三类算法,分别是非对称算法哈希算法对称算法

SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

二. 实现

(1) SM3

参数为要加密的内容和秘钥;文章来源地址https://www.toymoban.com/news/detail-533146.html

import java.io.UnsupportedEncodingException;
import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
import sun.misc.BASE64Encoder;

public class SM3Util {	
	
	/**
	* 
	* @param message 需要进行签名的内容
	* @param secret hmac秘钥
	* @return
	*/
	public static String getSignatureBySM3(String message, String secret) {
	    String signature = null;
	    KeyParameter keyParameter;
	    try {
	        keyParameter = new KeyParameter(secret.getBytes("UTF-8"));
	        SM3Digest digest = new SM3Digest();
	        HMac mac = new HMac(digest);
	        mac.init(keyParameter);
	        mac.update(message.getBytes("UTF-8"), 0, message.length());
	        byte[] byteSM3 = new byte[mac.getMacSize()];
	        mac.doFinal(byteSM3, 0);
	        signature = new BASE64Encoder().encode(byteSM3);
	    } catch (UnsupportedEncodingException e) {
	        System.out.println("getSignatureBySM3 error :");
            e.printStackTrace();
	    }
	    return signature;
	}
}

(2) SM4

import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import org.apache.commons.codec.binary.Hex;
import com.huawei.crypto.provider.SMS4KeySpec;
import sun.misc.BASE64Decoder;

/**
 * sm4工具类
 * 秘钥不得小于16位
 * @author hWX588043
 *
 */
public class SM4Util {
	
	static {
		Security.addProvider(new com.huawei.crypto.provider.HWJCE());  
	}
	
    public static String decode(String encrypted, String secretKey) throws Exception {
        // 加密结果转码
        byte[] data = Hex.decodeHex(encrypted.toCharArray());
        // 用户密钥处理
        SecretKey key = getKey(secretKey);

        // 解密
        Cipher cipher = Cipher.getInstance("SMS4");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] reclaimedBytes = cipher.doFinal(data);

        // 将解密结果输出
        return new String(reclaimedBytes, "utf-8");
    }

    /**
     * @param source    待加密字符串
     * @param secretKey 加密秘钥
     * @return 加密结果
     */
    public static String encode(String source, String secretKey)
            throws Exception {
        // 字符串转byte[]
        byte[] data = source.getBytes("utf-8");
        // 密钥处理
        SecretKey key = getKey(secretKey);

        // 加密
        Cipher cipher = Cipher.getInstance("SMS4");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedBytes = cipher.doFinal(data);

        // 将加密结果转16进制输出
        return Hex.encodeHexString(encryptedBytes);
    }

    /**
     * 对secretKey进行加密
     *
     * @param secretKey 密钥
     * @throws Exception
     */
    private static SecretKey getKey(String secretKey) throws Exception {
        byte[] keyBytes = new BASE64Decoder().decodeBuffer(secretKey);
        SMS4KeySpec sms4KeySpec = new SMS4KeySpec(keyBytes);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("SMS4");
        return keyFactory.generateSecret(sms4KeySpec);
    }
    
}

到了这里,关于SM3和SM4密钥的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go实现国密算法SM2、SM3、SM4

    SM2椭圆曲线公钥密码算法 Public key cryptographic algorithm SM2 based on elliptic curves 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012 依赖包: github.com/tjfoc/gmsm/sm2 SM3密码杂凑算法 - SM3 cryptographic hash algorithm 遵循的SM

    2024年02月15日
    浏览(31)
  • vue中使用国密算法SM2、SM3、SM4

    gm-crypto相关文档:https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator vue3+element ui例子:https://gitee.com/huanglgln/vue-sys-manage-el  vue3+view ui例子:https://gitee.com/huanglgln/vue-sys-manage  vue3+Ant Design Vue ui例子:https://gitee.com/huanglgln/vue-sys-manage-adv 

    2024年02月15日
    浏览(28)
  • 前端国密加解密使用方法SM2、SM3、SM4

       国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。      不多废话直接上干货 项目中 可能存在

    2023年04月09日
    浏览(30)
  • vue普通加密以及国密SM2、SM3、sm4的使用

    sm-crypto:https://www.npmjs.com/package/sm-crypto 1. SM2是非对称加密算法 它是基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号

    2023年04月09日
    浏览(26)
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    由于项目的需求,需要集成国密加解密,于是对国密又温故知新了一遍。同时整理了一下国密的一些算法。 本文主要从国密相关算法的简介、应用系统的集成、工具类的封装等方面入手,对国密进行深入的学习。 为了保障商用密码的安全性,国家密码局制定了一系列密码标

    2024年02月14日
    浏览(36)
  • Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)

    2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC

    2024年02月15日
    浏览(25)
  • 新手入门 | 掌握国密算法:新手指南: SM2 / SM3 / SM4密码算法详解

    在密码学领域,有多种加密与签名算法,它们在信息安全领域发挥着举足轻重的作用。如今,随着互联网的快速发展,网络安全已经成为各类信息系统完整性、可用性、保密性的重要保障,越来越多的国产密码算法得到了广泛的应用与关注。在本文中,我们将重点介绍三个经

    2024年02月12日
    浏览(118)
  • SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算的概念

    为了保障商用密码的安全性,国家密码局制定了一系列密码标准,包括:SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC) 等。 SM1、SM4、SM7、祖冲之密码(ZUC)是 对称算法 。 SM2、SM9是 非对称算法 。 SM3是 哈希算法 。 SM1、SM7算法不公开,调用该算法时,需要通过 加

    2024年02月03日
    浏览(25)
  • 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    SM1、SM2、SM3和SM4 为了保障商用密码的安全性,国家密码局制定了一系列密码标准,包括:SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC) 等。 SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法。 SM2、SM9是非对称算法。 SM3是哈希算法。 SM1、SM7算法不公开,调用该算法时,

    2024年02月03日
    浏览(28)
  • react+vue 前端国密算法sm2、sm3 、sm4的js ts实现

    1. 简单介绍下SM2 和 SM3 SM2 算法:是一种公钥加密算法,它的密钥长度为 256 位,安全性较高。可用于数字签名、密钥协商等场景。 SM3 算法:是一种对称加密算法,用于消息摘要和数字签名等场景。它的密钥长度为 256 位,安全性较高。SM3 算法与 SM2 算法相互配合,提高了整体

    2024年01月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包