# gmsm-java **Repository Path**: joker0017/gmsm-java ## Basic Information - **Project Name**: gmsm-java - **Description**: 国密算法-JAVA版。包含非对称算法SM2、对称算法SM4、摘要算法SM3。还包含传输加解密(SM2+SM3+SM4)、数据库加解密(SM3+SM4)、配置文件加解密(SM3+SM4)的组合使用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 50 - **Created**: 2026-01-16 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 国密算法-Java版 --- ### 介绍 本项目是一个基于 Java 的国密算法实现,包含 SM2、SM3 和 SM4 等国密标准算法的封装,支持加密、解密、签名、验证等常用安全功能。适用于需要国密算法支持的安全通信、数据加密、身份验证等场景。 主要功能包括: - **SM2**:国密椭圆曲线公钥密码算法,支持密钥生成、加密、解密、签名、验证。 - **SM3**:国密哈希算法,用于生成数据的摘要。 - **SM4**:国密对称加密算法,支持 CBC 和 ECB 模式。 - 工具类支持:包括数据转换(Hex、ASCII、二进制等)、数据加密配置工具、数据库加密工具等。 --- ### 使用说明 #### 1. 安装与依赖 确保你使用的是支持 Java 的开发环境。项目基于 Maven 构建,你需要在你的 `pom.xml` 文件中添加相关依赖(如果项目未提供自动依赖管理)。 #### 2. 核心功能使用示例 ##### SM2 加解密和签名验证 ```java // 生成 SM2 密钥对 SM2KeyPair keyPair = SM2.generateSm2Keys(false); // 使用公钥加密 String cipherText = SM2.encrypt("Hello Gitee", keyPair.getPublicKey()); // 使用私钥解密 String plainText = SM2.decrypt(cipherText, keyPair.getPrivateKey()); // 签名 String signature = SM2.sign("Hello Gitee", keyPair.getPrivateKey()); // 验证签名 boolean isValid = SM2.verify("Hello Gitee", keyPair.getPublicKey(), signature); ``` ##### SM3 摘要生成 ```java // 生成字符串的 SM3 摘要 String digest = SM3.getDigest("Hello Gitee"); System.out.println("SM3 Digest: " + digest); ``` ##### SM4 加解密(ECB / CBC 模式) ```java // 生成 SM4 密钥 String key = SM4.generateKey(); // ECB 模式加密与解密 String cipherTextECB = SM4.encrypt("Hello Gitee", key); String plainTextECB = SM4.decrypt(cipherTextECB, key); // CBC 模式加密与解密 String iv = "1234567890abcdef"; // 初始化向量 String cipherTextCBC = SM4.encrypt("Hello Gitee", key, iv); String plainTextCBC = SM4.decrypt(cipherTextCBC, key, iv); ``` ##### 数据转换工具 ```java // 将 Hex 字符串转为字节数组 byte[] bytes = ConvertUtil.hexStringToBytes("00aabbccddeeff"); // 将字节数组转为 Hex 字符串 String hex = ConvertUtil.getHexString(bytes); ``` ##### 配置文件加解密工具 ```java // 使用默认的 SM4 密钥和 IV 加密配置项 String encrypted = GmConfigurationUtil.encrypt("Hello Gitee"); // 解密配置项 String decrypted = GmConfigurationUtil.decrypt(encrypted); ``` ##### 数据库加解密工具 ```java // 加密对象并返回字符串 String encryptedData = GmDBUtil.encrypt("Hello Gitee"); // 解密字符串并还原为对象 String decryptedData = GmDBUtil.decrypt(encryptedData, String.class); ``` ##### 传输加解密工具 ```java // 使用默认 SM2 公钥加密数据 String cipherText = GmTransmissionUtil.encrypt("Hello Gitee"); // 使用 SM2 私钥解密数据 CipherObj cipherObj = GmTransmissionUtil.decrypt(cipherText, "your_sm2_private_key"); String plainText = cipherObj.getCipherText(); ``` --- #### 3. 注意事项 - **密钥管理**:本项目中部分密钥为静态常量,建议在实际生产环境中动态管理并加密存储。 - **异常处理**:加密和解密操作可能会抛出 `SmCryptoException`,请务必使用 try-catch 捕获处理。 - **测试类**:`Test.java` 提供了完整的使用示例,可以作为参考。 --- #### 4. 许可证 本项目遵循开源协议(具体以 `LICENSE` 文件为准),欢迎自由使用、修改和分发。请在使用过程中保留原始版权信息。 --- 如需更多帮助,请参考源码或提交 issue。欢迎参与项目贡献!