# BouncyCastle.SM4 库模块帮助文档

## BouncyCastle 成员列表 <a id="BouncyCastle" href="#BouncyCastle">&#x23;</a>

### BouncyCastle.SM4 <a id="BouncyCastle.SM4" href="#BouncyCastle.SM4">&#x23;</a>
国密 SM4 对称加密算法扩展库。  

相关库: crypt.sm4, BouncyCastle.SM2, BouncyCastle.SM3

### BouncyCastle.SM4() <a id="BouncyCastle.SM4" href="#BouncyCastle.SM4">&#x23;</a>
[返回对象:BouncyCastleSM4Object](#BouncyCastleSM4Object)

### BouncyCastle.SM4(mode,key,iv,aad) <a id="BouncyCastle.SM4" href="#BouncyCastle.SM4">&#x23;</a>
创建 SM4 算法工具。  
参数 @mode：加密模式（大写字符串），可指定为 "ECB","CBC","CTR","GCM","OFB","CFB" 之一。  
- 参数 @key: 如果指定 32 个字符的 16 进制编码文本则自动解码，  
否则如果超出或小于 16 字节在加解密时会自动截长补短（补空字符）。  
- 参数 @iv: 初始化向量（字符串或 buffer），  
GCM 模式用于指定 Nonce (Number Used Once)。  
 如果指定 32 位或 24 位（GCM）16 进制编码字符串则自动解码。  
否则如果超出或小于 16 字节在加解密时会自动截长补短（补空字符）  
- 参数 @aad = 默认的附加认证数据（Additional Authenticated Data），仅 GCM 模式需要指定

## BouncyCastleSM4Object 成员列表 <a id="BouncyCastleSM4Object" href="#BouncyCastleSM4Object">&#x23;</a>

### BouncyCastleSM4Object.aad <a id="BouncyCastleSM4Object.aad" href="#BouncyCastleSM4Object.aad">&#x23;</a>
默认的附加认证数据（Additional Authenticated Data），仅 GCM 模式需要指定。

### BouncyCastleSM4Object.bufferSize <a id="BouncyCastleSM4Object.bufferSize" href="#BouncyCastleSM4Object.bufferSize">&#x23;</a>
用于指定 encryptFile、decryptFile 函数读写文件的缓冲区大小。  
默认 1MB

### BouncyCastleSM4Object.createDecryptStream <a id="BouncyCastleSM4Object.createDecryptStream" href="#BouncyCastleSM4Object.createDecryptStream">&#x23;</a>
创建解密流对象

### BouncyCastleSM4Object.createDecryptStream(key,iv) <a id="BouncyCastleSM4Object.createDecryptStream" href="#BouncyCastleSM4Object.createDecryptStream">&#x23;</a>
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，初始化向量，不指定则使用 initVector 属性或自动生成  
返回解密流对象，包含 update、final 方法

### BouncyCastleSM4Object.createEncryptStream <a id="BouncyCastleSM4Object.createEncryptStream" href="#BouncyCastleSM4Object.createEncryptStream">&#x23;</a>
创建加密流对象

### BouncyCastleSM4Object.createEncryptStream(key,iv) <a id="BouncyCastleSM4Object.createEncryptStream" href="#BouncyCastleSM4Object.createEncryptStream">&#x23;</a>
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，初始化向量，不指定则使用 initVector 属性或自动生成  
返回加密流对象，包含 update、final 方法和 iv 属性

### BouncyCastleSM4Object.decrypt <a id="BouncyCastleSM4Object.decrypt" href="#BouncyCastleSM4Object.decrypt">&#x23;</a>
SM4 解密

### BouncyCastleSM4Object.decrypt(encryptedData,key,iv,aad) <a id="BouncyCastleSM4Object.decrypt" href="#BouncyCastleSM4Object.decrypt">&#x23;</a>
参数 @encryptedData 指定要解密的数据（字符串或 buffer）  
参数 @key 可选，指定密钥，不指定则使用 key 属性。  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性。  
如果 @iv 为空字符串 "" 或者 @iv 参数与 initVector 属性都是 null 值，则从加密数据头部读取 IV。  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性。  
返回解密后的数据（buffer 类型）

### BouncyCastleSM4Object.decryptBase64 <a id="BouncyCastleSM4Object.decryptBase64" href="#BouncyCastleSM4Object.decryptBase64">&#x23;</a>
从 Base64 字符串解密

### BouncyCastleSM4Object.decryptBase64(base64Data,key,iv,aad) <a id="BouncyCastleSM4Object.decryptBase64" href="#BouncyCastleSM4Object.decryptBase64">&#x23;</a>
参数 @base64Data 指定 Base64 格式的密文  
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性  
如果 @iv 为空字符串 "" 或者 @iv 参数与 initVector 属性都是 null 值，则从密文头部读取 IV  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性  
返回解密后的数据（buffer 类型）

### BouncyCastleSM4Object.decryptFile <a id="BouncyCastleSM4Object.decryptFile" href="#BouncyCastleSM4Object.decryptFile">&#x23;</a>
文件解密

### BouncyCastleSM4Object.decryptFile(inputPath,outputPath,key,iv) <a id="BouncyCastleSM4Object.decryptFile" href="#BouncyCastleSM4Object.decryptFile">&#x23;</a>
参数 @inputPath 指定输入文件路径。  
参数 @outputPath 指定输出文件路径。  
参数 @key 可选，指定密钥，不指定则使用 key 属性。  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性。  
如果 @iv 为空字符串 "" 或者 @iv 参数与 initVector 属性都是 null 值，则从文件头部读取 IV。  
返回布尔值，表示是否成功

### BouncyCastleSM4Object.decryptHex <a id="BouncyCastleSM4Object.decryptHex" href="#BouncyCastleSM4Object.decryptHex">&#x23;</a>
从十六进制字符串解密

### BouncyCastleSM4Object.decryptHex(hexData,key,iv,aad) <a id="BouncyCastleSM4Object.decryptHex" href="#BouncyCastleSM4Object.decryptHex">&#x23;</a>
参数 @hexData 指定十六进制格式的密文  
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性  
如果 @iv 为空字符串 "" 或者 @iv 参数与 initVector 属性都是 null 值，则从密文头部读取 IV  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性  
返回解密后的数据（buffer 类型）

### BouncyCastleSM4Object.deriveKey <a id="BouncyCastleSM4Object.deriveKey" href="#BouncyCastleSM4Object.deriveKey">&#x23;</a>
密钥派生函数（基于 SM3）

### BouncyCastleSM4Object.deriveKey(password,salt,iterations,keyLength) <a id="BouncyCastleSM4Object.deriveKey" href="#BouncyCastleSM4Object.deriveKey">&#x23;</a>
参数 @password 指定密码（字符串或 buffer）  
参数 @salt 指定盐值（字符串或 buffer）  
参数 @iterations 可选，迭代次数，默认 1000  
参数 @keyLength 可选，派生密钥长度（字节），默认 16 字节  
返回派生的密钥（buffer 类型）

### BouncyCastleSM4Object.encrypt <a id="BouncyCastleSM4Object.encrypt" href="#BouncyCastleSM4Object.encrypt">&#x23;</a>
SM4 加密

### BouncyCastleSM4Object.encrypt(data,key,iv,aad) <a id="BouncyCastleSM4Object.encrypt" href="#BouncyCastleSM4Object.encrypt">&#x23;</a>
参数 @data 指定要加密的数据（字符串或 buffer）  
参数 @key 可选，指定密钥，不指定则使用 key 属性。  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性或自动生成。  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性。  
返回加密后的数据，非 ECB 模式时返回两个值：密文,IV

### BouncyCastleSM4Object.encryptBase64 <a id="BouncyCastleSM4Object.encryptBase64" href="#BouncyCastleSM4Object.encryptBase64">&#x23;</a>
SM4 加密并返回 Base64 字符串

### BouncyCastleSM4Object.encryptBase64(data,key,iv,aad) <a id="BouncyCastleSM4Object.encryptBase64" href="#BouncyCastleSM4Object.encryptBase64">&#x23;</a>
参数 @data 指定要加密的数据（字符串或 buffer）  
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性或自动生成  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性  
返回加密后的 Base64 字符串

### BouncyCastleSM4Object.encryptFile <a id="BouncyCastleSM4Object.encryptFile" href="#BouncyCastleSM4Object.encryptFile">&#x23;</a>
文件加密

### BouncyCastleSM4Object.encryptFile(inputPath,outputPath,key,iv) <a id="BouncyCastleSM4Object.encryptFile" href="#BouncyCastleSM4Object.encryptFile">&#x23;</a>
参数 @inputPath 指定输入文件路径  
参数 @outputPath 指定输出文件路径  
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，初始化向量，未提供时使用 initVector 属性或自动生成并写入文件。  
返回布尔值，表示是否成功

### BouncyCastleSM4Object.encryptHex <a id="BouncyCastleSM4Object.encryptHex" href="#BouncyCastleSM4Object.encryptHex">&#x23;</a>
SM4 加密并返回十六进制字符串

### BouncyCastleSM4Object.encryptHex(data,key,iv,aad) <a id="BouncyCastleSM4Object.encryptHex" href="#BouncyCastleSM4Object.encryptHex">&#x23;</a>
参数 @data 指定要加密的数据（字符串或 buffer）  
参数 @key 可选，指定密钥，不指定则使用 key 属性  
参数 @iv 可选，非 ECB 模式的初始化向量，不指定则使用 initVector 属性或自动生成  
参数 @aad 可选，GCM 模式的附加认证数据，不指定则使用 aad 属性  
返回加密后的十六进制字符串

### BouncyCastleSM4Object.generateIV() <a id="BouncyCastleSM4Object.generateIV" href="#BouncyCastleSM4Object.generateIV">&#x23;</a>
生成随机的初始化向量（IV）  
返回 16 字节的 IV（buffer 类型）

### BouncyCastleSM4Object.generateKey() <a id="BouncyCastleSM4Object.generateKey" href="#BouncyCastleSM4Object.generateKey">&#x23;</a>
生成随机的 SM4 密钥  
返回 16 字节的密钥（buffer 类型）

### BouncyCastleSM4Object.initVector <a id="BouncyCastleSM4Object.initVector" href="#BouncyCastleSM4Object.initVector">&#x23;</a>
初始化向量（字符串或 buffer），  
GCM 模式用于指定 Nonce (Number Used Once)。  
 如果指定 32 位或 24 位（GCM）16 进制编码字符串则自动解码。  
否则如果超出或小于 16 字节在加解密时会自动截长补短（补空字符）

### BouncyCastleSM4Object.key <a id="BouncyCastleSM4Object.key" href="#BouncyCastleSM4Object.key">&#x23;</a>
16 位默认密钥（字符串或 buffer）。  
如果指定 32 个字符的 16 进制编码文本则自动解码，  
否则如果超出或小于 16 字节在加解密时会自动截长补短（补空字符）

### BouncyCastleSM4Object.padding <a id="BouncyCastleSM4Object.padding" href="#BouncyCastleSM4Object.padding">&#x23;</a>
填充模式，字符串值或 null 值。  
可指定为 null、"PKCS7"、"ZEROS"、"ISO10126" 之一。  
GCM 模式默认为 null，其他模式默认为 "PKCS7"
