iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >SM3和SM4密钥
  • 408
分享到

SM3和SM4密钥

java开发语言 2023-09-06 17:09:20 408人浏览 安东尼
摘要

一. 概述 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。 SM3算法:SM3杂凑算法是我国自主

一. 概述

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

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

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

二. 实现

(1) SM3

参数为要加密的内容和秘钥;

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 {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;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");    }        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);    }        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);    }    }

来源地址:https://blog.csdn.net/Swofford/article/details/129507950

--结束END--

本文标题: SM3和SM4密钥

本文链接: http://www.lsjlt.com/news/397361.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SM3和SM4密钥
    一. 概述 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。 SM3算法:SM3杂凑算法是我国自主...
    99+
    2023-09-06
    java 开发语言
  • java 国密算法SM2,SM3,SM4
    国密即国家密码局认定的国产密码算法,即商用密码。 国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3等,其中: SM2为国家密码管理局公布的公钥算法,其加密强度...
    99+
    2024-04-02
  • vue普通加密及国密SM2、SM3和sm4的使用例子
    目录介绍普通加密SM2使用SM3使用sm4使用总结相关网址 sm-crypto:https://www.npmjs.com/package/sm-crypto 介绍 1. SM2是非...
    99+
    2022-12-14
    Vue加密 vue加密解密 vue国密算法SM2
  • vue项目使用md5加密、crypto-js加密、国密sm3及国密sm4的方法
    目录方法一:md5加密方法二:crypto-js 加密解密方法三:国密sm3方法四:国密sm4写在后面:项目中涉及到一些加密解密的需求,了解并尝试了几种加密解密方法,以下: 方法一:...
    99+
    2022-12-08
    vue中md5加密 vue使用crypto-js加密 vue 国密sm3
  • 使用 Java Bouncy Castle实现国密算法SM4、SM3以及SM2的加密
    国密算法的实现借助了Java库函数 Bouncy Castle,加密库安装使用教程请参考链接 SM4 简介 SM4,又称为商密算法,是一种分组密码算法,于2012年由中国密码技术研究中心(中国密码学会成员)发布,目前已成为我国国家密码算法,...
    99+
    2023-08-18
    java 开发语言
  • 国密算法:利用python进行sm4算法的加解密,对称密钥
    本篇利用python中的gmssl库进行sm4算法的加解密演示。 国密算法sm4特点: 密钥长度:16bytes(128bits)分组长度和密钥长度均为128bits;是对称加密算法;分为ecb模式和...
    99+
    2023-09-02
    python 国密算法 sm4算法 对称密钥 gmssl
  • Java SM4加密解密
    依赖 org.bouncycastle bcprov-jdk15on 1.59 SM4工具类 public class Sm4Util { static { Security.addProvider(...
    99+
    2023-09-26
    java
  • JAVA集成国密SM3
    JAVA集成国密SM3加密、验签 一、pom配置二、加密代码集成2.1、目录结构2.2、源码2.3、测试 三、验签代码集成2.1、目录结构2.2、源码2.3、测试 四、相关链接 国...
    99+
    2023-09-18
    java 开发语言
  • JAVA集成国密SM4
    JAVA集成国密SM4加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、遇到的坑3.1、秘钥长度3.2、转码问题 四、相关链接 国密算法概述:http...
    99+
    2023-09-29
    java 开发语言
  • 如何使用sm4js进行加密和国密sm4总结
    目录1、先安装sm4js2、安装完成之后在项目中怎么使用3、国密sm4的总结3.1 、SM算法3.2 、SM4加密有两种模式:ecb和cbc总结最近在开发过程中,用到了sm4国密加密...
    99+
    2023-05-18
    sm4js 加密 国密 sm4
  • PHP sm4国密加密解密文件
    phpsm2sm3sm4: php 国密算法 支持 m2 sm3 sm4 SM3WithSM2签名 来源地址:https://blog.csdn.net/licanfeng1/article/details/132236052...
    99+
    2023-09-06
    android android studio ide php
  • 国密SM4对称加密Java加解密
    国密SM4对称加密Java加解密 提示:国密SM4对称加密Java加解密 国家密码管理局 参考博文 国密SM4对称加密Java加解密 国密SM4对称加密Java加解密前言一、SM4是什么?...
    99+
    2023-09-08
    java
  • 对称密钥和非对称密钥有什么区别
    对称密钥和非对称密钥有什么区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对称密钥和非对称密钥的区别是,对称密钥加解密使用同一个密钥,非对称密钥加解密使用不用密钥;对称密...
    99+
    2023-06-14
  • Linux创建SSH密钥、设置密钥登录、密钥登录原理
    Linux有2种登录方式: 使用用户名加密码的登录方式;密钥登录; 密钥登录: SSH登录是用的RSA非对称加密的,SSH密钥登录的时候可使用RSA密钥登录,SSH有专门创建SSH密钥的...
    99+
    2023-09-03
    linux ssh 服务器
  • win7密钥
    很多人安装了win7系统之后发现需要密钥激活,如果不激活的话会很影响使用,那么有哪些win7永久激活密钥呢下面小编就给大家带来了win7激活密钥分享,有需要的小伙伴快一起来看看吧。windows7 64位旗舰版“神key”激活密钥:KH2J...
    99+
    2023-07-14
  • c#中怎么实现sm4加密
    在C#中实现SM4加密可以通过使用第三方库来实现。一个常用的库是Bouncy Castle,可以通过NuGet安装。 首先,安装Bo...
    99+
    2024-04-02
  • 国密算法 SM4 加解密 java 工具类
    👑 博主简介:知名开发工程师 👣 出没地点:北京 💊 2023年目标:成为一个大佬 ————————————————————————————————...
    99+
    2023-09-01
    算法 java 开发语言
  • Android 数据SM4传输加解密
    第一:场景介绍   甲方要求,数据在传输过程中要加密。 第二:选择加解密方式: 这里面Android 和服务端都是选择SM4 第三:实现方式 服务端采用SpringBoot,在pom.xml 文件下添加依赖 org.bouncycastle...
    99+
    2023-09-07
    java 开发语言
  • 解决PHP中sm4加密算法与JAVA中sm4加密后的值不一致的问题
    重点:在PHP中,需要使7及以上版本才行 两种方式如下: 第一种:使用系统自带方法做sm4加密,代码如下: // 使用PHP系统方法,对字符串做sm4加密处理// 要加密的明文$plaintext = 'QCzqMc5n';// 双方约定好...
    99+
    2023-10-24
    php java 开发语言
  • 国密sm2公钥加密 私钥解密java代码实现
    目录 一、引入jar包 二、生成秘钥对,加解密工具类 一、引入jar包 org.bouncycastle bcprov-jdk15on ...
    99+
    2023-10-21
    java 开发语言 安全
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作