# loong-crypto **Repository Path**: for-in/loong-crypto ## Basic Information - **Project Name**: loong-crypto - **Description**: Loong-Crypto 支持多种国际算法密码运算,支持SM2,SM3,SM4商用密码算法,简化密码服务开发。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2023-04-24 - **Last Updated**: 2023-04-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Loong-Crypto - 简化密码服务开发

项目介绍 ------------------------------------- Loong-Crypto 支持多种国际算法密码运算,支持SM2,SM3,SM4商用密码算法,简化密码服务开发。
支持的算法 ----- * KeyAlgorithm * AES * Blowfish * DES * DESede * HmacMD5 * HmacSHA1 * HmacSHA224 * HmacSHA256 * HmacSHA384 * HmacSHA512 * RC2 * RC4 * SM4 * KeyPairAlgorithm * DSA * ECDSA * RSA * SM2 * MessageDigestAlgorithm * MD2 * MD4 * MD5 * SHA-1 * SHA-224 * SHA-256 * SHA-384 * SHA-512 * SM3 * HmacAlgorithm * HmacMD5 * HmacSHA1 * HmacSHA224 * HmacSHA256 * HmacSHA384 * HmacSHA512 * HmacSM3 * Cipher (Encryption) algorithm * AES * AESWrap * ARCFOUR * Blowfish * CCM * DES * DESede * DESedeWrap * ECIES * GCM * RC2 * RC4 * RC5 * RSA * SM2 * SM4 * EncryptionMethod * AES/ECB/NoPadding * AES/CBC/NoPadding * AES/CFB/NoPadding * AES/OFB/NoPadding * AES/ECB/PKCS5Padding * AES/CBC/PKCS5Padding * RC2/CBC/PKCS5Padding * RC4/ECB/PKCS5Padding * DES/ECB/PKCS5Padding * DES/CBC/PKCS5Padding * DESede/ECB/NoPadding * DESede/ECB/PKCS5Padding * DESede/ECB/PKCS7Padding * DESede/CBC/NoPadding * DESede/CBC/PKCS5Padding * DESede/CBC/PKCS7Padding * ECIES * ECIESwithSHA1 * ECIESwithSHA256 * ECIESwithSHA384 * ECIESwithSHA512 * ECIESwithDESede-CBC * ECIESwithSHA1andDESede-CBC * ECIESwithSHA256andDESede-CBC * ECIESwithSHA384andDESede-CBC * ECIESwithSHA512andDESede-CBC * ECIESwithAES-CBC * ECIESwithSHA1andAES-CBC * ECIESwithSHA256andAES-CBC * ECIESwithSHA384andAES-CBC * ECIESwithSHA512andAES-CBC * RSA/None/NoPadding * RSA/ECB/NoPadding * RSA/ECB/PKCS1Padding * SM2 * SM4/ECB/NoPadding * SM4/ECB/PKCS5Padding * SM4/CBC/NoPadding * SM4/CBC/PKCS5Padding * SignatureAlgorithm * SHA1WithDSA * SHA224WithDSA * SHA256WithDSA * SHA384WithDSA * SHA512WithDSA * SHA1WithECDSA * SHA224WithECDSA * SHA256WithECDSA * SHA384WithECDSA * SHA512WithECDSA * MD2WithRSA * MD5WithRSA * SHA1WithRSA * SHA224WithRSA * SHA256WithRSA * SHA384WithRSA * SHA512WithRSA * SHA1WithRSASSA-PSS * SHA224WithRSASSA-PSS * SHA256WithRSASSA-PSS * SHA384WithRSASSA-PSS * SHA512WithRSASSA-PSS * SHA1WithSM2 * SHA256WithSM2 * SM3WithSM2 扩展功能 ------------------------------------- 支持RSA密码算法,SM2密码算法加密签名消息 - RFC中各类型标识符定义如下: | 对象标识符OID | 对象标识符定义 | | -------------------- | -------------------------------------------- | | 1.2.840.113549.1.7.1 | 数据类型data | | 1.2.840.113549.1.7.2 | 签名数据类型signedData | | 1.2.840.113549.1.7.3 | 数字信封数据类型envelopedData | | 1.2.840.113549.1.7.4 | 签名及数字信封数据类型signedAndEnvelopedData | | 1.2.840.113549.1.7.5 | 摘要数据类型digestData | | 1.2.840.113549.1.7.6 | 加密数据类型encryptedData | - GM/T 0010 - 2012 规范中各类型标识符定义如下: | 对象标识符OID | 对象标识符定义 | | ----------------------- | -------------------------------------------- | | 1.2.156.10197.6.1.4.2 | SM2密码算法加密签名消息语法规范 | | 1.2.156.10197.6.1.4.2.1 | 数据类型data | | 1.2.156.10197.6.1.4.2.2 | 签名数据类型signedData | | 1.2.156.10197.6.1.4.2.3 | 数字信封数据类型envelopedData | | 1.2.156.10197.6.1.4.2.4 | 签名及数据信封数据类型signedAndEnvelopedData | | 1.2.156.10197.6.1.4.2.5 | 加密数据类型encrypedData | | 1.2.156.10197.6.1.4.2.6 | 密钥协商类型keyAgreementInfo | 极速开始 ------------------------------------- 以下例子基于Spring Boot ### 第一步:添加Maven依赖 直接添加以下maven依赖即可 ```xml org.loong loong-crypto-spring-boot-starter 2.0.0 ``` ### 第二步:调用接口 ```java // 注入接口实例 @Autowired private CryptoService cryptoService; ... // 测试数据 private byte[] data = "Hello Word!".getBytes(); // 创建对称密钥 SecretKey secretKey = cryptoService.generateKey(KeyAlgorithm.SM4, KeyGeneratorParameters.builder().keySize(128).build()); // 创建非对称密钥 KeyPair keyPair = cryptoService.generateKeyPair(KeyPairAlgorithm.SM2, KeyPairGeneratorParameters.builder().keySize(256).build()); // 摘要计算 byte[] digest = cryptoService.digest(MessageDigestAlgorithm.SM3, data); // HMac计算 byte[] hmac = cryptoService.hmac(HmacAlgorithm.HMAC_SM3, HmacParameters.builder().secret(secretKey.getEncoded()).build(), data); // HMac验证 boolean hmacValid = cryptoService.verifyHmac(HmacAlgorithm.HMAC_SM3, HmacParameters.builder().secret(secretKey.getEncoded()).build(), data, hmac); // 数据加密 CipherParameters encryptParams = CipherParameters.builder().key(keyPair.getPublic()).build(); byte[] cipherText = cryptoService.encrypt(CipherAlgorithm.SM2, encryptParams, data); // 数据解密 CipherParameters decryptParams = CipherParameters.builder().key(keyPair.getPrivate()).build(); byte[] plainText = cryptoService.decrypt(CipherAlgorithm.SM2, decryptParams, cipherText); // 数据签名 SignatureParameters signatureParams = SignatureParameters.builder().key(keyPair.getPrivate()).build(); byte[] signature = cryptoService.sign(SignatureAlgorithm.SM3_SM2, signatureParams, data); // 签名验证 SignatureParameters verifyParams = SignatureParameters.builder().key(keyPair.getPublic()).build(); boolean signatureValid = cryptoService.verify(SignatureAlgorithm.SM3_SM2, verifyParams, data, signature); ```