欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

国密算法介绍

最编程 2024-07-10 15:47:58
...

一、总体介绍

1、国密即国家密码局认定的国产密码算法。主要有 SM1,SM2,SM3,SM4。密钥长度和分组长度均为 128 位。

2、SM1 为对称加密。其加密强度与 AES 相当。该算法不公开,采用硬件实现,调用该算法时,需要通过加密芯片的接口进行调用。

3、SM2 为非对称加密,基于 ECC。该算法已公开。由于该算法基于 ECC,故其签名速度与秘钥生成速度都快于 RSA。ECC 256位(SM2 采用的就是 ECC 256 位的一种)安全强度比 RSA 2048 位高,但运算速度快于RSA。

4、SM3 消息摘要。可以用 MD5 作为对比理解。该算法已公开。校验结果为 256 位。

5、SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

二、实例

 

    <dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15to18</artifactId>
  <version>1.69</version>
</dependency>
	<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.9</version>
</dependency>

 

        String text = "我是一段测试aaaa";

		// SM2 非对称加密算法

		KeyPair pair = SecureUtil.generateKeyPair("SM2");
		byte[] privateKey = pair.getPrivate().getEncoded();
		System.out.println(privateKey);
		byte[] publicKey = pair.getPublic().getEncoded();

		SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
		// 公钥加密,私钥解密
		String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
		String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
		System.out.println(encryptStr);

		// sm4 对称加密算法
		
		SymmetricCrypto sm4 = SmUtil.sm4();

		String encryptHex = sm4.encryptHex(text);
		System.out.println(sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8));

		//sm3 
		String digestHex = SmUtil.sm3(text);
		System.out.println(digestHex);

 

推荐阅读