//rc4 加密算法 import crypt; namespace crypt; class crypt.rc4 { ctor( ... ) { this = ..crypt(...); }; setPassword = function(key,flags=0) { if( type(key) != type.string ) error("请指定正确的密钥",2); if( #key < 5 ){ key = ..raw.buffer(5,key); } elseif( #key> 16 ) { return this.setHashPassword(key,0x8003/*_CALG_MD5*/,0x6801/*_CALG_RC4*/,flags); } var ret,err = this.setPlainPassword(key,0x6801/*_CALG_RC4*/,flags); if(!ret) return null,err; } } /**intellisense() crypt.rc4 = rc4加密算法 crypt.rc4() = 返回RC4加密容器,\n可选使用一个字符串参数指定密钥向量\n如果要与其他编程语言有相同加解密结果,建议不要设置该参数\n!crypy_rc4. !crypy_rc4.setPassword(.("密钥",选项) = 密钥长度为5到16字节,\n密钥超过128位(16字节)时使用MD5转换为哈希值,\n如果密钥长度小于5字节自动填充'\0'\n参数@2不需要指定 !crypy_rc4.decrypt( = 解密数据 !crypy_rc4.decrypt(.(输入数据,是否已输入全部数据,哈希对象,选项) = 参数 @1 指定字符串或 buffer。\n除第一个参数以外,其他参数都是可选参数。\n分块解密时,参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。\n成功返回解密文本,失败返回空,\n可使用..lasterr()函数获取错误信息 !crypy_rc4.decrypt(.(输入缓冲区,输入数据大小,哈希对象,选项) = 参数 @1 指定 buffer 或字符串。\n如果参数 @2 指定的数值小于缓冲区据总长度,解密结束。\n可使用 -1 表示解密结束,且输入数据大小等于缓冲区大小。\n其他参数可忽略不用管。\n\n成功返回存放解密结果的缓冲区,返回值 2 为解密长度。\n需要分块解密的算法,例如 RSA 算法返回的解密结果为字符串。\n失败返回 null, 错误信息,错误代码。\n\n用法可参考 decryptFile 函数源码。 !crypy_rc4.encrypt( = 加密数据 !crypy_rc4.encrypt(.(输入数据,是否已输入全部数据,哈希对象,选项) = 参数 @1 指定字符串或 buffer。\n除第一个参数以外,其他参数都是可选参数。\n分块加密时,参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。\n成功返回加密文本,失败返回空,\n可使用..lasterr()函数获取错误信息 !crypy_rc4.encrypt(.(输入缓冲区,输入数据大小,哈希对象,选项) = 参数 @1 指定 buffer 或字符串。\n如果参数 @2 指定的数值小于缓冲区据总长度,加密结束。\n可使用 -1 表示解密结束,且输入数据大小等于缓冲区大小。\n其他参数可忽略不用管。\n\n成功返回存放加密结果的缓冲区,返回值 2 为解密长度。\n需要分块解密的算法,例如 RSA 算法返回的解密结果为字符串。\n失败返回 null, 错误信息,错误代码。\n\n用法可参考 encryptFile 函数源码。 !crypy_rc4.encryptFile( = 加密文件 !crypy_rc4.encryptFile(.(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) = 参数 @1 指定要加密的文件。参数 @2 指定要保存加密结果的文件。\n文件参数都可以指定文件路径、文件对象(兼容 io.file,fsys.file,fsys.stream)。\n可选用参数 @3 指定分块加密的字节长度,默认为 1MB。\n指定字节长度时会自动调整到对齐块大小,参数不需要考虑对齐。\n可选指定进度回调函数,回调参数 @1,@2 分别为输入文件总长度、已读取长度。\n其他调用参数(哈希对象,选项)一般不必指定。\n\n函数执行成功返回 true,失败返回 null,错误信息。 !crypy_rc4.decryptFile( = 解密文件 !crypy_rc4.decryptFile(.(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) = 参数 @1 指定要解密的文件。参数 @2 指定要保存解密结果的文件。\n文件参数都可以指定文件路径、文件对象(兼容 io.file,fsys.file,fsys.stream)。\n可选用参数 @3 指定分块加密的字节长度,默认为 1MB。\n指定字节长度时会自动调整到对齐块大小,参数不需要考虑对齐。\n可选指定进度回调函数,回调参数 @1,@2 分别为输入文件总长度、已读取长度。\n其他调用参数(哈希对象,选项)一般不必指定。\n\n函数执行成功返回 true,失败返回 null,错误信息。 !crypy_rc4.buffer = 加解密时暂存输入输出数据的缓冲区。\n只能通过调用 allocBuffer 函数分配此缓冲区。\n或者由加解密函数自动分配此缓冲区。\n\n如果未分配缓冲区,或缓冲区大小不够。\n加解密时会重新调用 allocBuffer 函数分配到合适大小。 \n\n一般不应直接访问此属性。 !crypy_rc4.allocBuffer( = 分配加解密需要用到的 buffer。 !crypy_rc4.allocBuffer(.(大小,块大小) = 分配加解密需要用到的 buffer。\n如果不手动分配,程序将会自动按需分配 buffer。\n参数 @2 可选,可用对象的blockSize属性指定默认块大小。 !crypy_rc4.blockSize = 加密填充的块大小 !crypy_rc4.hasKey() = 检测是否已设置密钥 end intellisense**/