11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2151|回复: 2
上一主题 下一主题

[★ AS3 类库] hurlant.crypto,网友分享的自己整理的AS3常用加密库

[复制链接] TA的其它主题
发表于 2020-2-23 11:25:32 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2020-2-24 19:29 编辑

As3 Crypto是用Actionscript 3编写的密码术库,提供了几种常用算法。此版本还引入了TLS引擎(TLS通常称为SSL。)

协议:TLS 1.0支持(部分)
证书:X.509证书解析和验证,内置的根CA。
公钥加密:RSA(加密/解密,签名/验证)
密钥加密:AES,DES,3DES,BlowFish,XTEA,RC4
机密模式:ECB,CBC,CFB,CFB8,OFB,CTR
散列算法:MD2,MD5,SHA-1,SHA-224,SHA-256
可用的填充:PKCS#5,PKCS#1类型1和2
其他有用的东西:HMAC,随机,TLS-PRF,一些ASN-1 / DER解析

演示


例子
[Actionscript3] 纯文本查看 复制代码
package {
        import com.hurlant.crypto.symmetric.DESKey;
        import com.hurlant.crypto.symmetric.ECBMode;
        import com.hurlant.util.Base64;

        import flash.display.Sprite;
        import flash.utils.ByteArray;

        /** 
         * Author:大飞狼
         * Date: 2014-6-19 上午9:30:12
         * Synopsis:des加解密测试
         */
        public class Main extends Sprite {
                /** 
                 * key顾名思义就是加解密用的钥匙
                 */
                private const KEY_STR: String = "123123";

                public function Main() {
                        var b_ba: ByteArray = encrypt(KEY_STR, "www.dafeilang.com");
                        //字符串形式的密文  
                        var b_ciphertext: String = Base64.encodeByteArray(b_ba);
                        trace("密文:", b_ciphertext);

                        var b_ciphertext16: String = byteArrayTo16(b_ba);
                        trace("十六进制形式密文:", b_ciphertext16);

                        //解密后的原文  
                        var b_originalText: String = decrypt(KEY_STR, Base64.decodeToByteArray(b_ciphertext));
                        trace("解密得到:", b_originalText);

                        //解密16进制密文后的原文  
                        var b_originalText16: String = decrypt(KEY_STR, from16ToByteArray(b_ciphertext16));
                        trace("解密十六进制密文得到:", b_originalText16);
                }
                /** 
                 * 加密
                 * @param key 加解密用的key
                 * @param data 被加密的字符串
                 * @return 加密后生成ByteArray数据
                 */
                private function encrypt(key: String, data: String): ByteArray {
                        trace("执行加密方法,key:", key, ",被加密的字符串:", data);

                        //实验化key的Bytearray对象,给DESKey使用  
                        var b_keyByteArray: ByteArray = new ByteArray();
                        b_keyByteArray.writeUTFBytes(key);

                        //实例化DESKey  
                        var b_desKey: DESKey = new DESKey(b_keyByteArray);

                        //不只是有ecb还有cbc,cfb等,有兴趣可以自己尝试  
                        var b_ecb: ECBMode = new ECBMode(b_desKey);
                        //把需要加密字符串转换为ByteArray  
                        var b_byteArray: ByteArray = convertStringToByteArray(data);

                        //执行加密  
                        b_ecb.encrypt(b_byteArray);

                        return b_byteArray;
                }
                /** 
                 * 解密
                 * @param key 解密用的key
                 * @param data 需要解密的数据
                 * @return 解密后的数据
                 */
                private function decrypt(key: String, data: ByteArray): String {
                        trace("\n执行解密方法,key:", key, ",需要解密的字符串:", data);

                        //实验化key的Bytearray对象,给DESKey使用  
                        var b_keyByteArray: ByteArray = new ByteArray();
                        b_keyByteArray.writeUTFBytes(key);

                        //实例化DESKey  
                        var b_desKey: DESKey = new DESKey(b_keyByteArray);

                        //  
                        var b_ecb: ECBMode = new ECBMode(b_desKey);

                        var b_byteArray: ByteArray = new ByteArray();
                        b_byteArray.writeBytes(data);

                        //执行解密  
                        b_ecb.decrypt(b_byteArray);

                        return convertByteArrayToString(b_byteArray);
                }

                /** 
                 * String转ByteArray
                 * @param str
                 * @return
                 */
                public function convertStringToByteArray(str: String): ByteArray {
                        var bytes: ByteArray;
                        if (str) {
                                bytes = new ByteArray();
                                bytes.writeUTFBytes(str);
                        }
                        return bytes;
                }
                /** 
                 * ByteArray转String
                 * @param bytes
                 * @return
                 */
                public function convertByteArrayToString(bytes: ByteArray): String {
                        var str: String;
                        if (bytes) {
                                bytes.position = 0;
                                str = bytes.readUTFBytes(bytes.length);
                        }
                        return str;
                }
                /** 
                 * 把ByteArray转换为16进制的形式的字符串
                 * @param ba
                 * @param name
                 * @return
                 */
                private function byteArrayTo16(ba: ByteArray): String {
                        ba.position = 0;
                        var b_str: String = "";
                        while (ba.bytesAvailable > 0) {
                                var b_s: String = ba.readUnsignedByte().toString(16);
                                //              trace("b_s:",b_s);  
                                if (b_s.length < 2) b_s = "0" + b_s;
                                b_str += b_s;
                        }
                        return b_str;
                }
                private function from16ToByteArray(str: String): ByteArray {
                        var b_ba: ByteArray = new ByteArray();
                        var b_arr: Array = str.split("");
                        var b_length: int = b_arr.length;
                        for (var i: int = 0; i < b_length - 1; i += 2) {
                                var b_char1: String = b_arr[i];
                                var b_char2: String = b_arr[i + 1];
                                var b_byte: int = parseInt(b_char1 + b_char2, 16);
                                //              trace("b_byte:",b_byte);  
                                b_ba.writeByte(b_byte);
                        }
                        return b_ba;
                }

        }
}


as3crypto.zip (431.27 KB, 下载次数: 15, 售价: 10 银子)

评分

参与人数 1银子 +20 贡献 +2 收起 理由
TKCB + 20 + 2 11RIA six six six.(666)

查看全部评分

发表于 2020-2-24 19:32:57 | 显示全部楼层
【11RIA 闪客社区,评分公示】:
是否有价值:良好(银子 +20  贡献 +2)
是否原创:否
是否翻译:否
如对自己的评分有疑问,则咨询版主、管理员等。
回复

使用道具 举报

发表于 2020-3-6 00:23:34 | 显示全部楼层
很好很强大!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表