{"_id":"@boguang2000/gmcrypto","_rev":"12-9aa89b016449d4dc33a2efb1babf822a","name":"@boguang2000/gmcrypto","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.2":{"name":"@boguang2000/gmcrypto","version":"1.0.2","keywords":["SM2","SM3","SM4","C1C2C3","C1C3C2","ASN1","encrypt","decrypt","sign","verifySign","PKCS7","NoPadding"],"author":{"name":"boguang"},"license":"ISC","_id":"@boguang2000/gmcrypto@1.0.2","maintainers":[{"name":"boguang2000","email":"boguang2000@163.com"}],"dist":{"shasum":"b15755a06251ef57b53dbda15a047cf57eb4b81d","tarball":"https://registry.npmjs.org/@boguang2000/gmcrypto/-/gmcrypto-1.0.2.tgz","fileCount":3,"integrity":"sha512-bYlGIphp7uRWiMSfiQIfpCmGtU6Ne3QLYuVd5dI4AJcPhao+xMSmw2XVfTWJqtsMJEkG8JVw3Uy1aaF2GQ8u9Q==","signatures":[{"sig":"MEQCIH2r/0qxq1cZ4N/3K/5yT7/S+18kE5KvfxJUErijjn5HAiBcWvukRKp00IygCZPXJuyD4I0tX+Zj9gFZy+Z6eDfr+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117834},"main":"dist/gmcrypto.min-1.0.0.js","scripts":{"test":"node test/gmcrypto.test.js"},"_npmUser":{"name":"boguang2000","email":"boguang2000@163.com"},"_npmVersion":"6.14.11","description":"国密SM2、SM3、SM4算法组件，支持SM2公私钥对随机生成、SM2私钥计算生成公钥、SM2加密解密（密文支持字符串拼接模式和DER.ASN1模式）、SM2签名与验签（签名结果支持字符串拼接模式和DER.ASN1模式）、SM3摘要计算、SM4 ECB模式（支持PKCS7Padding和NoPadding）、SM4 CBC模式（支持PKCS7Padding和NoPadding）","directories":{},"_nodeVersion":"14.15.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gmcrypto_1.0.2_1760630983600_0.6074622732840191","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@boguang2000/gmcrypto","version":"1.0.7","description":"国密SM2、SM3、SM4算法组件，支持SM2公私钥对随机生成、SM2私钥计算生成公钥、SM2加密解密（密文支持字符串拼接模式和DER.ASN1模式）、SM2签名与验签（签名结果支持字符串拼接模式和DER.ASN1模式）、SM3摘要计算、SM4 ECB模式（支持PKCS7Padding和NoPadding）、SM4 CBC模式（支持PKCS7Padding和NoPadding）","main":"dist/gmcrypto.min-1.0.7.js","scripts":{"test":"node test/gmcrypto.test.js"},"keywords":["SM2","SM3","SM4","C1C2C3","C1C3C2","ASN1","encrypt","decrypt","sign","verifySign","PKCS7","NoPadding"],"author":{"name":"boguang"},"license":"ISC","_id":"@boguang2000/gmcrypto@1.0.7","_nodeVersion":"14.15.5","_npmVersion":"6.14.11","dist":{"integrity":"sha512-qU32VGJ4T1G+vXWNTm4XMtVau982qXH3rqCF9B6WLAMi/Z+RLpAfJKstzrRrXDXUjBCSJukH6QUV+1sqv4xqZw==","shasum":"be535f1c2cc3e3c851564ad5e85e3b980965d28b","tarball":"https://registry.npmjs.org/@boguang2000/gmcrypto/-/gmcrypto-1.0.7.tgz","fileCount":9,"unpackedSize":731619,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCS36QckSSZ3/E4mrmsio5NZFFBi6087mEoVCscMAf1+gIgAMhVT7THpwCCkQLPKsX9FQ+LJw4DPVKdlLQ+QdbD5Ng="}]},"_npmUser":{"name":"boguang2000","email":"boguang2000@163.com"},"directories":{},"maintainers":[{"name":"boguang2000","email":"boguang2000@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gmcrypto_1.0.7_1760758194833_0.942711901846635"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-16T16:09:43.510Z","modified":"2025-10-18T03:29:55.265Z","1.0.0":"2025-10-16T15:56:04.831Z","1.0.1":"2025-10-16T16:07:26.247Z","1.0.2":"2025-10-16T16:09:43.804Z","1.0.4":"2025-10-17T02:41:15.425Z","1.0.5":"2025-10-17T02:43:58.502Z","1.0.6":"2025-10-17T06:18:24.721Z","1.0.7":"2025-10-18T03:29:55.071Z"},"author":{"name":"boguang"},"license":"ISC","keywords":["SM2","SM3","SM4","C1C2C3","C1C3C2","ASN1","encrypt","decrypt","sign","verifySign","PKCS7","NoPadding"],"description":"国密SM2、SM3、SM4算法组件，支持SM2公私钥对随机生成、SM2私钥计算生成公钥、SM2加密解密（密文支持字符串拼接模式和DER.ASN1模式）、SM2签名与验签（签名结果支持字符串拼接模式和DER.ASN1模式）、SM3摘要计算、SM4 ECB模式（支持PKCS7Padding和NoPadding）、SM4 CBC模式（支持PKCS7Padding和NoPadding）","maintainers":[{"name":"boguang2000","email":"boguang2000@163.com"}],"readme":"# gmcrypto-js\n\n国密加密算法JavaScript实现库，全面支持SM2、SM3、SM4三种国密算法，提供完整的加密、解密、签名、验签和摘要计算功能。\n\n## 一、组织说明\n\n### 1.1、整体说明\n\ngmcrypto-js是一个纯JavaScript实现的国密算法库，遵循《密码学算法国家/行业标准》，提供了丰富的API接口，支持多种数据格式输入输出，适用于需要国密算法支持的各类Web应用和Node.js服务。\n\n### 1.2、兼容性说明\n\n- **浏览器环境**：支持所有现代浏览器，包括Chrome、Firefox、Safari、Edge等\n- **Node.js环境**：支持Node.js 8.0及以上版本\n- **Java V8引擎**：经过特殊优化，兼容Java V8引擎环境\n- **模块系统**：同时支持CommonJS、AMD和全局变量三种模块使用方式\n- **ES5兼容**：生成的代码完全兼容ES5标准，确保在各种运行环境中稳定运行\n\n### 1.3、功能特点\n\n- **SM2椭圆曲线密码算法**：支持密钥生成、加密解密（字符串拼接模式和ASN1编码模式）、签名验签\n- **SM3密码杂凑算法**：提供标准的摘要计算功能\n- **SM4分组密码算法**：支持ECB和CBC两种工作模式\n- **多数据格式支持**：支持字符串、16进制字符串、字节数组三种数据格式的输入输出\n- **工具函数库**：提供完善的数据转换和辅助功能\n\n\n### 1.4、使用方法\n\n#### 1.4.1、Node.js环境\n\n通过npm安装：npm install @boguang2000/gmcrypto\n\n```javascript\n// 引入库\nconst { Sm2Utils, Sm3Utils, Sm4Utils, CommonUtils, CipherMode } = require('@boguang2000/gmcrypto');\n\n// 或引入文件\n// const { Sm2Utils, Sm3Utils, Sm4Utils, CommonUtils, CipherMode } = require('../gmcrypto.min-1.0.7.js');\n```\n\n#### 1.4.2、浏览器环境\n\n```html\n<!-- 引入版本 -->\n<script src=\"path/to/gmcrypto.min-1.0.7.js\"></script>\n\n<script>\n    // 通过全局变量使用\n    const sm2Utils = new gmcrypto.Sm2Utils();\n    const hashResult = gmcrypto.Sm3Utils.encryptFromText('Hello, 国密!');\n</script>\n```\n\n## 二、API说明\n\n### 2.1、CommonUtils工具类\n\nCommonUtils提供了各种数据格式转换和辅助功能，是使用国密算法的基础工具集。\n\n#### 2.1.1、主要方法\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `utf8StrToHex(str)` | UTF8字符串转16进制字符串 | str: String - UTF8编码的字符串 | String - 16进制表示的字符串 |\n| `utf8StrToBytes(str)` | UTF8字符串转字节数组 | str: String - UTF8编码的字符串 | Uint8Array/Array - 字节数组 |\n| `hexToBytes(hex)` | 16进制字符串转字节数组 | hex: String - 16进制表示的字符串 | Uint8Array/Array - 字节数组 |\n| `hexToUtf8Str(hex)` | 16进制字符串转UTF8字符串 | hex: String - 16进制表示的字符串 | String - UTF8编码的字符串 |\n| `bytesToHex(bytes)` | 字节数组转16进制字符串 | bytes: Uint8Array/Array - 字节数组 | String - 16进制表示的字符串 |\n| `bytesToUtf8Str(bytes)` | 字节数组转UTF8字符串 | bytes: Uint8Array/Array - 字节数组 | String - UTF8编码的字符串 |\n| `isHexString(hex)` | 判断是否为有效的16进制字符串 | hex: String - 待判断的字符串 | Boolean - 是否为有效16进制字符串 |\n| `equals(a, b)` | 比较两个值是否相等（适用于字符串、数组等） | a, b: 任意类型 - 待比较的值 | Boolean - 是否相等 |\n| `randomHex(len)` | 生成指定长度的随机16进制字符串 | len: Number - 长度 | String - 随机16进制字符串 |\n| `randomWord()` | 生成随机字（Word） | 无 | Number - 随机数 |\n\n#### 2.1.2、使用示例\n\n```javascript\n// 字符串转16进制\nconst hex = gmcrypto.CommonUtils.utf8StrToHex('Hello, 国密!');\nconsole.log(hex); // 输出: 48656c6c6f2c20e59c8b...\n\n// 16进制转字节数组\nconst bytes = gmcrypto.CommonUtils.hexToBytes(hex);\n\n// 字节数组转字符串\nconst str = gmcrypto.CommonUtils.bytesToUtf8Str(bytes);\n```\n\n### 2.2、CipherMode枚举\n\nCipherMode定义了SM2加密算法的不同数据拼接模式，主要用于控制加密数据的组织结构。\n\n#### 2.2.1、枚举值\n\n| 枚举值 | 值 | 描述 |\n|-------|-----|------|\n| `CipherMode.C1C2C3` | 1 | SM2标准默认的拼接模式：C1(椭圆曲线点) + C2(密文数据) + C3(哈希值) |\n| `CipherMode.C1C3C2` | 2 | 非标准的拼接模式：C1(椭圆曲线点) + C3(哈希值) + C2(密文数据) |\n\n#### 2.2.2、使用示例\n\n```javascript\n// 创建C1C3C2模式的SM2工具实例\nconst sm2Utils = new gmcrypto.Sm2Utils(CipherMode.C1C3C2);\n\n// 使用该实例进行加密解密\nconst cipherText = sm2Utils.encryptFromText(pubKeyHex, plainText);\n```\n\n### 2.3、Sm2Utils\n\nSm2Utils提供SM2非对称加密算法的完整功能，包括密钥生成、加密解密和签名验签。\n\n#### 2.3.1、构造函数\n\n```javascript\n// 默认构造（使用C1C2C3模式）\nconst sm2Utils = new gmcrypto.Sm2Utils();\n\n// 指定模式构造\nconst sm2UtilsC1C3C2 = new gmcrypto.Sm2Utils(CipherMode.C1C3C2);\n```\n\n#### 2.3.2、密钥管理\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `generateKeyPair()` | 生成SM2密钥对 | 无 | String[] - 依次包含prvkeyhex私钥16进制串、pubkeyhex公钥16进制串 |\n| `getPublicKey(prvkeyhex)` | 根据私钥生成公钥 | prvkeyhex: String - 私钥的16进制表示 | String - 公钥的16进制表示 |\n\n#### 2.3.3、加密解密\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `encryptFromText(pubkey, plaintext)` | 加密字符串明文 | pubkey: String - 公钥的16进制表示<br>plaintext: String - 待加密的字符串 | String - 密文的16进制表示 |\n| `encryptFromHex(pubkey, plainhex)` | 加密16进制明文 | pubkey: String - 公钥的16进制表示<br>plainhex: String - 待加密的16进制字符串 | String - 密文的16进制表示 |\n| `encryptFromData(pubkey, plaindata)` | 加密字节数组明文 | pubkey: Uint8Array/Array - 公钥的字节数组<br>plaindata: Uint8Array/Array - 待加密的字节数组 | Uint8Array/Array - 密文的字节数组 |\n| `decryptToText(prvkey, ciphertext)` | 解密到字符串 | prvkey: String - 私钥的16进制表示<br>ciphertext: String - 密文的16进制表示 | String - 解密后的字符串 |\n| `decryptToHex(prvkey, cipherhex)` | 解密到16进制字符串 | prvkey: String - 私钥的16进制表示<br>cipherhex: String - 密文的16进制表示 | String - 解密后的16进制字符串 |\n| `decryptToData(prvkey, cipherdata)` | 解密到字节数组 | prvkey: Uint8Array/Array - 私钥的字节数组<br>cipherdata: Uint8Array/Array - 密文的字节数组 | Uint8Array/Array - 解密后的字节数组 |\n| `encryptASN1FromText(pubkey, plaintext)` | ASN1模式加密字符串 | pubkey: String - 公钥的16进制表示<br>plaintext: String - 待加密的字符串 | String - 密文的16进制表示 |\n| `encryptASN1FromHex(pubkey, plainhex)` | ASN1模式加密16进制 | pubkey: String - 公钥的16进制表示<br>plainhex: String - 待加密的16进制字符串 | String - 密文的16进制表示 |\n| `encryptASN1FromData(pubkey, plaindata)` | ASN1模式加密字节数组 | pubkey: Uint8Array/Array - 公钥的字节数组<br>plaindata: Uint8Array/Array - 待加密的字节数组 | Uint8Array/Array - 密文的字节数组 |\n| `decryptASN1ToText(prvkey, ciphertext)` | ASN1模式解密到字符串 | prvkey: String - 私钥的16进制表示<br>ciphertext: String - 密文的16进制表示 | String - 解密后的字符串 |\n| `decryptASN1ToHex(prvkey, cipherhex)` | ASN1模式解密到16进制 | prvkey: String - 私钥的16进制表示<br>cipherhex: String - 密文的16进制表示 | String - 解密后的16进制字符串 |\n| `decryptASN1ToData(prvkey, cipherdata)` | ASN1模式解密到字节数组 | prvkey: Uint8Array/Array - 私钥的字节数组<br>cipherdata: Uint8Array/Array - 密文的字节数组 | Uint8Array/Array - 解密后的字节数组 |\n\n#### 2.3.4、签名验签\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `signFromText(prvkey, message)` | 对字符串消息签名 | prvkey: String - 私钥的16进制表示<br>message: String - 待签名的字符串 | String - 签名的16进制表示 |\n| `signFromHex(prvkey, messageHex)` | 对16进制消息签名 | prvkey: String - 私钥的16进制表示<br>messageHex: String - 待签名的16进制字符串 | String - 签名的16进制表示 |\n| `signFromData(prvkey, messageData)` | 对字节数组消息签名 | prvkey: Uint8Array/Array - 私钥的字节数组<br>messageData: Uint8Array/Array - 待签名的字节数组 | Uint8Array/Array - 签名的字节数组 |\n| `verifySignFromText(pubkey, message, sign)` | 验证字符串消息签名 | pubkey: String - 公钥的16进制表示<br>message: String - 原始消息字符串<br>sign: String - 签名的16进制表示 | Boolean - 验签是否通过 |\n| `verifySignFromHex(pubkey, messageHex, sign)` | 验证16进制消息签名 | pubkey: String - 公钥的16进制表示<br>messageHex: String - 原始消息的16进制字符串<br>sign: String - 签名的16进制表示 | Boolean - 验签是否通过 |\n| `verifySignFromData(pubkey, messageData, signData)` | 验证字节数组消息签名 | pubkey: Uint8Array/Array - 公钥的字节数组<br>messageData: Uint8Array/Array - 原始消息的字节数组<br>signData: Uint8Array/Array - 签名的字节数组 | Boolean - 验签是否通过 |\n| `signASN1FromText(prvkey, message)` | ASN1模式对字符串签名 | prvkey: String - 私钥的16进制表示<br>message: String - 待签名的字符串 | String - 签名的16进制表示 |\n| `signASN1FromHex(prvkey, messageHex)` | ASN1模式对16进制签名 | prvkey: String - 私钥的16进制表示<br>messageHex: String - 待签名的16进制字符串 | String - 签名的16进制表示 |\n| `signASN1FromData(prvkey, messageData)` | ASN1模式对字节数组签名 | prvkey: Uint8Array/Array - 私钥的字节数组<br>messageData: Uint8Array/Array - 待签名的字节数组 | Uint8Array/Array - 签名的字节数组 |\n| `verifySignASN1FromText(pubkey, message, sign)` | ASN1模式验证字符串签名 | pubkey: String - 公钥的16进制表示<br>message: String - 原始消息字符串<br>sign: String - 签名的16进制表示 | Boolean - 验签是否通过 |\n| `verifySignASN1FromHex(pubkey, messageHex, sign)` | ASN1模式验证16进制签名 | pubkey: String - 公钥的16进制表示<br>messageHex: String - 原始消息的16进制字符串<br>sign: String - 签名的16进制表示 | Boolean - 验签是否通过 |\n| `verifySignASN1FromData(pubkey, messageData, signData)` | ASN1模式验证字节数组签名 | pubkey: Uint8Array/Array - 公钥的字节数组<br>messageData: Uint8Array/Array - 原始消息的字节数组<br>signData: Uint8Array/Array - 签名的字节数组 | Boolean - 验签是否通过 |\n\n#### 2.3.5、使用示例\n\n```javascript\n// 生成密钥对\nconst sm2Utils = new gmcrypto.Sm2Utils();\nconst keyPair = sm2Utils.generateKeyPair();\nconst { pubkeyhex, prvkeyhex } = keyPair;\n\n// 加密解密示例（字符串拼接模式）\nconst plainText = 'Hello, 国密!';\nconst cipherText = sm2Utils.encryptFromText(pubkeyhex, plainText);\nconst decryptedText = sm2Utils.decryptToText(prvkeyhex, cipherText);\nconsole.log(decryptedText === plainText); // true\n\n// 签名验签示例\nconst sign = sm2Utils.signFromText(prvkeyhex, plainText);\nconst isValid = sm2Utils.verifySignFromText(pubkeyhex, plainText, sign);\nconsole.log(isValid); // true\n\n// ASN1模式示例\nconst cipherASN1 = sm2Utils.encryptASN1FromText(pubkeyhex, plainText);\nconst decryptedASN1 = sm2Utils.decryptASN1ToText(prvkeyhex, cipherASN1);\n```\n\n### 2.4、Sm3Utils\n\nSm3Utils提供SM3密码杂凑算法的摘要计算功能，生成固定长度（256位）的哈希值。\n\n#### 2.4.1、主要方法\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `encryptFromText(text)` | 计算字符串的SM3摘要 | text: String - 待计算的字符串 | String - 64位16进制表示的哈希值 |\n| `encryptFromHex(hex)` | 计算16进制字符串的SM3摘要 | hex: String - 待计算的16进制字符串 | String - 64位16进制表示的哈希值 |\n| `encryptFromData(data)` | 计算字节数组的SM3摘要 | data: Uint8Array/Array - 待计算的字节数组 | Uint8Array/Array - 32字节的哈希值数组 |\n\n#### 2.4.2、使用示例\n\n```javascript\n// 计算字符串的SM3摘要\nconst hashHex = gmcrypto.Sm3Utils.encryptFromText('Hello, 国密!');\nconsole.log(hashHex); // 输出64位16进制字符串\nconsole.log(hashHex.length); // 64\n\n// 计算字节数组的SM3摘要\nconst bytes = gmcrypto.CommonUtils.utf8StrToBytes('Hello, 国密!');\nconst hashBytes = Sm3Utils.encryptFromData(bytes);\nconsole.log(hashBytes.length); // 32\n```\n\n### 2.5、Sm4Utils\n\nSm4Utils提供SM4分组密码算法的加密解密功能，支持ECB和CBC两种工作模式。\n\n#### 2.5.1、加密方法\n\n| 方法名 | 描述 | 参数 | 返回值 |\n|-------|------|------|-------|\n| `gmcrypto.Sm4Utils.ECB.encryptFromText(plaintext, key)` | 加密字符串明文（ECB模式） | plaintext: String - 待加密的字符串<br>key: String - 密钥的16进制表示（16字节） | String - 密文的16进制表示 |\n| `gmcrypto.Sm4Utils.ECB.encryptFromHex(plainhex, key)` | 加密16进制明文（ECB模式） | plainhex: String - 待加密的16进制字符串<br>key: String - 密钥的16进制表示（16字节） | String - 密文的16进制表示 |\n| `gmcrypto.Sm4Utils.ECB.encryptFromData(plaindata, key)` | 加密字节数组明文（ECB模式） | plaindata: Uint8Array/Array - 待加密的字节数组<br>key: Uint8Array/Array - 密钥的字节数组（16字节） | Uint8Array/Array - 密文的字节数组 |\n| `gmcrypto.Sm4Utils.ECB.decryptToText(ciphertext, key)` | 解密到字符串（ECB模式） | ciphertext: String - 密文的16进制表示<br>key: String - 密钥的16进制表示（16字节） | String - 解密后的字符串 |\n| `gmcrypto.Sm4Utils.ECB.decryptToHex(cipherhex, key)` | 解密到16进制字符串（ECB模式） | cipherhex: String - 密文的16进制表示<br>key: String - 密钥的16进制表示（16字节） | String - 解密后的16进制字符串 |\n| `gmcrypto.Sm4Utils.ECB.decryptToData(cipherdata, key)` | 解密到字节数组（ECB模式） | cipherdata: Uint8Array/Array - 密文的字节数组<br>key: Uint8Array/Array - 密钥的字节数组（16字节） | Uint8Array/Array - 解密后的字节数组 |\n| `gmcrypto.Sm4Utils.CBC.encryptFromText(plaintext, key, iv)` | 加密字符串明文（CBC模式） | plaintext: String - 待加密的字符串<br>key: String - 密钥的16进制表示（16字节）<br>iv: String - 初始向量的16进制表示（16字节） | String - 密文的16进制表示 |\n| `gmcrypto.Sm4Utils.CBC.encryptFromHex(plainhex, key, iv)` | 加密16进制明文（CBC模式） | plainhex: String - 待加密的16进制字符串<br>key: String - 密钥的16进制表示（16字节）<br>iv: String - 初始向量的16进制表示（16字节） | String - 密文的16进制表示 |\n| `gmcrypto.Sm4Utils.CBC.encryptFromData(plaindata, key, iv)` | 加密字节数组明文（CBC模式） | plaindata: Uint8Array/Array - 待加密的字节数组<br>key: Uint8Array/Array - 密钥的字节数组（16字节）<br>iv: Uint8Array/Array - 初始向量的字节数组（16字节） | Uint8Array/Array - 密文的字节数组 |\n| `gmcrypto.Sm4Utils.CBC.decryptToText(ciphertext, key, iv)` | 解密到字符串（CBC模式） | ciphertext: String - 密文的16进制表示<br>key: String - 密钥的16进制表示（16字节）<br>iv: String - 初始向量的16进制表示（16字节） | String - 解密后的字符串 |\n| `gmcrypto.Sm4Utils.CBC.decryptToHex(cipherhex, key, iv)` | 解密到16进制字符串（CBC模式） | cipherhex: String - 密文的16进制表示<br>key: String - 密钥的16进制表示（16字节）<br>iv: String - 初始向量的16进制表示（16字节） | String - 解密后的16进制字符串 |\n| `gmcrypto.Sm4Utils.CBC.decryptToData(cipherdata, key, iv)` | 解密到字节数组（CBC模式） | cipherdata: Uint8Array/Array - 密文的字节数组<br>key: Uint8Array/Array - 密钥的字节数组（16字节）<br>iv: Uint8Array/Array - 初始向量的字节数组（16字节） | Uint8Array/Array - 解密后的字节数组 |\n\n#### 2.5.2、使用示例\n\n```javascript\n// ECB模式示例\nconst key = gmcrypto.CommonUtils.utf8StrToHex('aostarit_2020-01'); // 16字节密钥\nconst plainText = 'Hello, 国密!';\n\n// ECB加密解密\nconst cipherECB = gmcrypto.Sm4Utils.ECB.encryptFromText(plainText, key);\nconst decryptedECB = gmcrypto.Sm4Utils.ECB.decryptToText(cipherECB, key);\nconsole.log(decryptedECB === plainText); // true\n\n// CBC模式示例\nconst iv = gmcrypto.CommonUtils.utf8StrToHex('sgcc_sgitg_2020.'); // 16字节初始向量\n\n// CBC加密解密\nconst cipherCBC = gmcrypto.Sm4Utils.CBC.encryptFromText(plainText, key, iv);\nconst decryptedCBC = gmcrypto.Sm4Utils.CBC.decryptToText(cipherCBC, key, iv);\nconsole.log(decryptedCBC === plainText); // true\n```\n\n### 2.6、注意事项\n\n1. **密钥安全**：在实际应用中，请确保密钥的安全存储和传输\n2. **数据长度**：SM2加密算法对于明文长度没有限制，但过长的明文可能会影响性能\n3. **密钥长度**：SM4算法要求密钥和初始向量（IV）必须为16字节\n4. **编码格式**：库内部使用UTF-8编码处理字符串\n5. **错误处理**：在调用API时，应适当添加错误处理机制\n\n### 2.7、许可证\n\nISC License\n\n### 2.8、注意事项\n\n- 本库主要用于前端加密和签名验证，服务端建议使用更安全的实现\n- 密钥管理请遵循安全最佳实践","readmeFilename":"README.md"}