大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
前言
最近世界政治影响,我国也开始要求算法的使用,以避免来自外国的黑客入侵。我们在使用加密算法时,有必要选择使用国密算法进行加密
一、国密SM4是什么?
国密即国家密码局认定的国产密码算法。
主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA
ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
二、使用步骤
1.引入hutool依赖
Hutool借助Bouncy Castle库可以支持国密算法
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.5</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.58</version>
</dependency>
2.示例代码
2.1 使用秘钥
import cn.hutool.crypto.symmetric.SymmetricCrypto;
public class sm4Demo {
//key必须是16字节,即128位
final static String key = "sm4demo123456789";
//指明加密算法和秘钥
static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());
//加密为16进制,也可以加密成base64/字节数组
public static String encryptSm4(String plaintext) {
return sm4.encryptHex(plaintext);
}
//解密
public static String decryptSm4(String ciphertext) {
return sm4.decryptStr(ciphertext);
}
public static void main(String[] args) {
String content = "hello sm4";
String plain = encryptSm4(content);
String cipher = decryptSm4(plain);
System.out.println(plain + "\n" + cipher);
}
}
2.2 不使用秘钥
构造SymmetricCrypto 对象时,不传秘钥即可。
SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding");
2.3 使用SmUtil快速创建SymmetricCrypto对象
//不带秘钥
SymmetricCrypto sm4 = SmUtil.sm4();
//带秘钥
String key = "1234567812345678";
SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());
三、API介绍
3.1 加密方法
SymmetricCrypto 类方法 | 返回类型 |
---|---|
encrypt (byte[] data) | byte[] |
encrypt (String data,Charset charset) | byte[] |
encryptBase64(byte[] data) | String |
encrypt(Inputstream data) | byte[] |
encrypt (String data) | byte[] |
encrypt (String data,String charset) | byte[] |
encryptBase64(String data) | String |
encryptBase64(InputStream data) | String |
encryptBase64(String data,String charset) | String |
encryptBase64(String data,Charset charset) | String |
encryptHex (byte[] data) | String |
encryptHex (String data) | String |
encryptHex (Inputstream data) | String |
encryptHex(String data,string charset) | String |
encryptHex (String data,Charset charset) | String |
3.2 解密方法
SymmetricCrypto 类方法 | 返回类型 |
---|---|
decryptstr (String data) | String |
decryptstr (byte[] bytes,Charset charset) | String |
decrypt (byte[] bytes)) | byte[] |
decrypt (String data) | byte[] |
decryptstr (byte[] bytes) | String |
decrypt (InputStream data) | byte[] |
decryptStr (InputStream data) | String |
decryptstr (String data,Charset charset) | String |
decryptstr (String data,Charset charset) | String |
总结
SymmetricCrypto类的构造方法非常灵活,可以灵活根据自己需要的方式进行构造
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185668.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...