SM4算法在Java中的实现
简介
SM4是一种对称加密算法,由中国密码学家提出,被中国政府采用为国家密码算法标准。该算法具有高度的安全性和效率,广泛应用于各种加密场景中。本文将介绍如何在Java中使用SM4算法进行加密和解密操作。
代码示例
首先,我们需要导入相关的Java包,以便使用SM4算法的实现:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
接下来,我们创建一个SM4Utils
类来封装SM4算法的加密和解密方法:
public class SM4Utils {
private static final String ALGORITHM_NAME = "SM4";
private static final String CIPHER_ALGORITHM = "SM4/ECB/PKCS5Padding";
private static final int KEY_SIZE = 128;
public static byte[] encrypt(byte[] key, byte[] data) throws Exception {
SecretKey secretKey = new SecretKeySpec(key, ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] key, byte[] data) throws Exception {
SecretKey secretKey = new SecretKeySpec(key, ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public static byte[] generateKey() throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM_NAME);
keyGenerator.init(KEY_SIZE);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
}
在上述代码中,我们定义了一个SM4Utils
类,其中包含了加密、解密和生成密钥的方法。加密和解密方法都接受一个密钥和待处理的数据作为输入,并返回处理后的结果。生成密钥的方法使用Java的KeyGenerator
类来生成一个随机密钥。
下面是一个简单的示例,展示如何使用SM4Utils
类进行加密和解密操作:
public class Main {
public static void main(String[] args) {
try {
byte[] key = SM4Utils.generateKey();
byte[] data = "Hello, World!".getBytes();
byte[] encryptedData = SM4Utils.encrypt(key, data);
System.out.println("Encrypted data: " + new String(encryptedData));
byte[] decryptedData = SM4Utils.decrypt(key, encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述示例中,我们首先生成一个随机密钥,然后使用该密钥对字符串"Hello, World!"进行加密。接着,我们将加密后的数据进行解密,并输出结果。
总结
通过上述示例代码,我们可以看到在Java中使用SM4算法进行加密和解密操作非常简单。只需要几行代码,就可以实现安全且高效的数据处理。如果你在项目中需要使用对称加密算法,SM4算法是一个很好的选择。希望本文对你理解和使用SM4算法提供了帮助。
参考资料:
- [Java Cryptography Architecture API Specification & Reference - JavaTM Cryptography Architecture (JCA) Reference Guide](
- [国密算法SM4算法java实现](