# crypt.des 库模块帮助文档

## crypt 成员列表 <a id="crypt" href="#crypt">&#x23;</a>

### crypt.des <a id="crypt.des" href="#crypt.des">&#x23;</a>
DES，2DES，3DES 加密算法支持库  
加密模式CBC，填充模式PKCS5（兼容 PKCS7 ），如果与其他编程语言互通要保持一致  
[各编程语言 DES 加密兼容写法](https://www.aardio.com/zh-cn/docs/library-guide/std/crypt/des.html)   

演示代码：  

```aardio  
import crypt.des;   

var des = crypt.des();   
des.setPassword("abcd12" )   

//加密  
var sstr = des.encrypt("测试字符串");  

//解密  
var str = des.decrypt(sstr);  
```

### crypt.des() <a id="crypt.des" href="#crypt.des">&#x23;</a>
返回 DES 加密容器。  
支持 DES，2DES，3DES 加密（根据密钥长度自动选择）。  
可选使用一个字符串参数指定密钥向量（ECB 模式忽略向量）。  
如果要与其他编程语言有相同加解密结果,建议不要设置该参数  

[返回对象:crypy3desObject](#crypy3desObject)

## crypy3desObject 成员列表 <a id="crypy3desObject" href="#crypy3desObject">&#x23;</a>

### crypy3desObject.allocBuffer <a id="crypy3desObject.allocBuffer" href="#crypy3desObject.allocBuffer">&#x23;</a>
分配加解密需要用到的 buffer。

### crypy3desObject.allocBuffer(大小,块大小) <a id="crypy3desObject.allocBuffer" href="#crypy3desObject.allocBuffer">&#x23;</a>
分配加解密需要用到的 buffer。  
如果不手动分配，程序将会自动按需分配 buffer。  
参数 @2 可选，可用对象的blockSize属性指定默认块大小。

### crypy3desObject.blockSize <a id="crypy3desObject.blockSize" href="#crypy3desObject.blockSize">&#x23;</a>
加密填充的块大小，默认为 8

### crypy3desObject.buffer <a id="crypy3desObject.buffer" href="#crypy3desObject.buffer">&#x23;</a>
加解密时暂存输入输出数据的缓冲区。  
只能通过调用 allocBuffer 函数分配此缓冲区。  
或者由加解密函数自动分配此缓冲区。  

如果未分配缓冲区，或缓冲区大小不够。  
加解密时会重新调用 allocBuffer 函数分配到合适大小。   

一般不应直接访问此属性。

### crypy3desObject.decrypt <a id="crypy3desObject.decrypt" href="#crypy3desObject.decrypt">&#x23;</a>
解密数据

### crypy3desObject.decrypt(输入数据,是否已输入全部数据,哈希对象,选项) <a id="crypy3desObject.decrypt" href="#crypy3desObject.decrypt">&#x23;</a>
参数 @1 指定字符串或 buffer。  
除第一个参数以外，其他参数都是可选参数。  
分块解密时，参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。  
成功返回解密文本,失败返回空,  
可使用..lasterr()函数获取错误信息

### crypy3desObject.decrypt(输入缓冲区,输入数据大小,哈希对象,选项) <a id="crypy3desObject.decrypt" href="#crypy3desObject.decrypt">&#x23;</a>
参数 @1 指定 buffer 或字符串。  
如果参数 @2 指定的数值小于缓冲区据总长度，解密结束。  
可使用 -1 表示解密结束，且输入数据大小等于缓冲区大小。  
其他参数可忽略不用管。  

成功返回存放解密结果的缓冲区，返回值 2 为解密长度。  
需要分块解密的算法，例如 RSA 算法返回的解密结果为字符串。  
失败返回 null, 错误信息,错误代码。  

用法可参考 decryptFile 函数源码。

### crypy3desObject.decryptFile <a id="crypy3desObject.decryptFile" href="#crypy3desObject.decryptFile">&#x23;</a>
解密文件

### crypy3desObject.decryptFile(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) <a id="crypy3desObject.decryptFile" href="#crypy3desObject.decryptFile">&#x23;</a>
参数 @1 指定要解密的文件。参数 @2 指定要保存解密结果的文件。  
文件参数都可以指定文件路径、文件对象（兼容 io.file,fsys.file,fsys.stream）。  
可选用参数 @3 指定分块加密的字节长度，默认为 1MB。  
指定字节长度时会自动调整到对齐块大小，参数不需要考虑对齐。  
可选指定进度回调函数，回调参数 @1,@2 分别为输入文件总长度、已读取长度。  
其他调用参数（哈希对象，选项）一般不必指定。  

函数执行成功返回 true，失败返回 null,错误信息。

### crypy3desObject.encrypt <a id="crypy3desObject.encrypt" href="#crypy3desObject.encrypt">&#x23;</a>
加密数据

### crypy3desObject.encrypt(输入数据,是否已输入全部数据,哈希对象,选项) <a id="crypy3desObject.encrypt" href="#crypy3desObject.encrypt">&#x23;</a>
参数 @1 指定字符串或 buffer。  
除第一个参数以外，其他参数都是可选参数。  
分块加密时，参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。  
成功返回加密文本,失败返回空,  
可使用..lasterr()函数获取错误信息

### crypy3desObject.encrypt(输入缓冲区,输入数据大小,哈希对象,选项) <a id="crypy3desObject.encrypt" href="#crypy3desObject.encrypt">&#x23;</a>
参数 @1 指定 buffer 或字符串。  
如果参数 @2 指定的数值小于缓冲区据总长度，加密结束。  
可使用 -1 表示解密结束，且输入数据大小等于缓冲区大小。  
其他参数可忽略不用管。  

成功返回存放加密结果的缓冲区，返回值 2 为解密长度。  
需要分块解密的算法，例如 RSA 算法返回的解密结果为字符串。  
失败返回 null, 错误信息,错误代码。  

用法可参考 encryptFile 函数源码。

### crypy3desObject.encryptFile <a id="crypy3desObject.encryptFile" href="#crypy3desObject.encryptFile">&#x23;</a>
加密文件

### crypy3desObject.encryptFile(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) <a id="crypy3desObject.encryptFile" href="#crypy3desObject.encryptFile">&#x23;</a>
参数 @1 指定要加密的文件。参数 @2 指定要保存加密结果的文件。  
文件参数都可以指定文件路径、文件对象（兼容 io.file,fsys.file,fsys.stream）。  
可选用参数 @3 指定分块加密的字节长度，默认为 1MB。  
指定字节长度时会自动调整到对齐块大小，参数不需要考虑对齐。  
可选指定进度回调函数，回调参数 @1,@2 分别为输入文件总长度、已读取长度。  
其他调用参数（哈希对象，选项）一般不必指定。  

函数执行成功返回 true，失败返回 null,错误信息。

### crypy3desObject.hasKey() <a id="crypy3desObject.hasKey" href="#crypy3desObject.hasKey">&#x23;</a>
检测是否已设置密钥

### crypy3desObject.setInitVector(字符串向量,选项) <a id="crypy3desObject.setInitVector" href="#crypy3desObject.setInitVector">&#x23;</a>
设置初始化向量，参数 @2 可选。  
成功返回true。  

ECB 模式忽略向量（IV），不需要指定。

### crypy3desObject.setKeyParam(类型,数据值,选项) <a id="crypy3desObject.setKeyParam" href="#crypy3desObject.setKeyParam">&#x23;</a>
设置加密参数  
数据值可以是结构体,字符串，或 buffer 对象,  
如果数据值一个数值参数,则转换为表示32位整型数值地址的结构体指针  
成功返回true,失败请使用 ..lasterr()获取错误信息

### crypy3desObject.setKeyParamMode(_CRYPT_MODE_ECB) <a id="crypy3desObject.setKeyParamMode" href="#crypy3desObject.setKeyParamMode">&#x23;</a>
设置为 ECB 加密模式。  
ECB 模式忽略向量（IV）。  
成功返回 true,失败请使用 ..lasterr()获取错误信息

### crypy3desObject.setKeyParamPadding(_PKCS5) <a id="crypy3desObject.setKeyParamPadding" href="#crypy3desObject.setKeyParamPadding">&#x23;</a>
设置加密填充方式  
成功返回true,失败请使用 ..lasterr()获取错误信息

### crypy3desObject.setPassword <a id="crypy3desObject.setPassword" href="#crypy3desObject.setPassword">&#x23;</a>
设置密钥，根据密钥长度自动选择算法。  
如果遇到密钥长度不一致的情况，直接截断就可以。  
例如 DES 最长 8 字节密钥，如果遇到 32 字节密钥一般只要  
调用 string.left 取最前面 8 字节就可以。

### crypy3desObject.setPassword("密钥",选项) <a id="crypy3desObject.setPassword" href="#crypy3desObject.setPassword">&#x23;</a>
密钥使用补 0 方式自动对齐。  
密钥长度小于等于 8 字节时使用 DES 加密  
密钥长度小于等于 16 字节时使用 2DES 加密  
密钥长度小于等于 24 字节时使用 3DES 加密,  
超过 24 字节使用使用MD5算法创建转换为24位密钥,  
参数 @2 不需要指定
