精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 资源出售

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

2019年好项目,每月多挣好多钱┃ 服务器出租E3单路E5双路E5 ┃ 长期 包养全网交友粉大户实力公司大量收粉日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
2019年好项目,每月多挣好多钱┃ 模拟器虚拟机多开! 单进程 ┃长期 包养全网交友粉大户交友粉 婚恋粉 各种活粉日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
寻找有实力的短信群fa通道█长期大量收购各种活粉█长期 包养全网交友粉大户另收土豆社交APP活粉日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
寻找有实力的短信群fa通道█ 长期收购各种引流软件 █长期 包养全网交友粉大户无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
寻找有实力的短信群fa通道寻有实力的短信群fa通道加Q525253各种【活粉变现点这里】客服①无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
寻找有实力的短信群fa通道寻有实力的短信群fa通道加Q525253各种【活粉变现点这里】客服①无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
寻找有实力的短信群fa通道寻有实力的短信群fa通道加Q525253各种【活粉变现点这里】客服①无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
星盟社群无限收各种引流资源寻有实力的短信群fa通道加Q525253各种【活粉变现点这里】客服②无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
星盟社群无限收精准网赚资源寻有实力的短信群fa通道加Q525253各种【活粉变现点这里】客服②无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
星盟社群免费帮对接担保交易实力收精准粉大量稳定加Q525253各种【活粉变现点这里】客服②无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
星盟社群欢迎买卖方进群合作实力收精准粉大量稳定加Q525253┏┏ 全网大量收交友粉 ┓┓无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
星盟社群免费帮对接渠道资源实力收精准粉大量稳定加Q525253〓 各种APP交友粉 〓无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
█     高 收 益 项 目   █实力收精准粉大量稳定加Q525253〓  抖音 快手 火山  〓无限收交友粉 引流软件 qq7305830日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
█      耗资巨大     █实力收精准粉大量稳定加Q525253〓   附 近 人    〓收男女粉+q53779879日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
█      市场最牛     █★★★出售抖音网赚精准粉 Q317738〓 各论坛美拍部落 〓收男女粉+q53779879日吃8000+收一手零转化微信小群粉高价收购【全部行业精准粉】进群!
█   支 持     日 结   █★★★出售抖音网赚精准粉 Q317738〓各种活人粉实力对接〓收收收大量宝妈粉QQ289259高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█   咨询QQ   880194   █【实力公司无限收各种思路引流活粉】〓大小量通吃欢迎来撩〓收收收.微信扫码进群.加QQ9703796高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█公司实力寻引流高手商务合作█↑↑↑↑↑↑↑↑↑加QQ:575199999〓 稳定全年365天收 〓█★█长期收购网赚精准粉█★█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█公司实力寻引流高手商务合作███ 实力公司 长期有效 ██〓 无限 收交友粉 〓█★█长期收购网赚精准粉█★█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█公司实力寻引流高手商务合作███ 收收收收 引流软件 ██┗┗ 全网最高单价收粉 ┛┛高价收qq渠道,交友粉+q7042641高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█公司实力寻引流高手商务合作███ 收收收收 引流脚本 ██◆大量收婚恋宝妈快手火山◆高价收qq渠道,交友粉+q7042641高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█公司实力寻引流高手商务合作███ 收收收收 引流思路 ██◇稳定收交友粉,找我换钱◇鼎信社群高价收WZ各类热门资源高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█ 公司 高价 收 引流 软件 渠道 ███ 收收收收 群fa软件 ██◆收快手火山虎牙找我换钱◆鼎信社万人对接基地高效出粉收粉高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█ 公司 高价 收 引流 软件 渠道 ███ 收收收收 精准wz粉 ██◇长期收交友粉大小量通吃◇███ 鼎信社群 行业顶尖 ███高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█ 公司 高价 收 引流 软件 渠道 ███ 收收收收 精准zy粉 ██◆ 婚恋/抖音/空间/快手 ◆鼎信社群欢迎各类 商人对接入驻高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█ 公司 高价 收 引流 软件 渠道 ███ 收收收收 引流人才 ██◇ 优质有量的找我换钱 ◇鼎信社欢迎各类粉商精英对接交流高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
█ 公司 高价 收 引流 软件 渠道 ███ 收收收收 引流方式 ██◆ 实力大型公司收媒体量 ◆█收交友粉 价格美丽 只走担保█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
全网最高单价收粉QQ420073██收收收收 易语言高手██◇ 大量资金 ,来一收代理 ◇█收交友粉 价格美丽 只走担保█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
实力收购各种粉加QQ420073██ 收收收收 软件定制 ██◆ 无限收交友粉交友粉 ◆█收交友粉 价格美丽 只走担保█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
收购精准兼职粉加QQ420073██ 加qq群:839661627 ██◇ 各种活人粉实力对接 ◇█收交友粉 价格美丽 只走担保█高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
收购精准网赚粉加QQ420073██进群找管理 备注引流██全网大量收各种APP交友粉,日引1000+精准粉求包养QQ10917高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
收购软件渠道思路QQ420073██进群找管理 备注引流██包养全网交友粉大户日引1000+精准粉求包养QQ10917高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
████收购微信收租量QQ55698545大量收微信进群粉联系q584121900全网大量收各种APP交友粉,日引1000+精准粉求包养QQ10917高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
████收购微信收租量QQ55698545出微信qq交友粉网赚粉精准粉兼职包养全网交友粉大户日引1000+精准粉求包养QQ10917高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
长期出QQ群QQ号微信精准粉网挣粉大量出各类精准用户粉,全行业私信全网大量收各种APP交友粉,日引1000+精准粉求包养QQ10917高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
出QQ群微信QQ号交友粉网赚粉兼职粉限时限量出售高精准网赚粉包养全网交友粉大户★工作室长期出抖音WZ粉Q159907高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
大量出QQ网赚粉微信粉Q群精准活粉高价收网吧终端量联系Q1908886662全网大量收各种APP交友粉,█网站统计█I引流系统█I高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
Q群粉及交友一手资源Q:4925442249██████出精准网赚粉兼职粉包养全网交友粉大户高价收微信进群活跃男粉Q858529686高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
公司高价收购流量服务器出租E3-E5-单进程全网大量收各种APP交友粉,软件开发商实力出QQ网赚粉兼职粉高价收购【全部行业精准粉】进群!高价收购【全部行业精准粉】进群!
出游戏粉 游戏粉加Q245014016出Q群微信直播粉联系Q2604720501包养全网交友粉大户出兼职粉有实力的来高价收购【全部行业精准粉】进群!我要租广告位
查看: 5752|回复: 2
收起左侧

[C#源码] TEA加密解密工具类

[复制链接]
发表于 2018-7-21 15:39:42 | 显示全部楼层 |阅读模式
/// <summary>
    /// TEA加密解密工具类
    /// </summary>
    internal class TEAUtil
    {
        /// <summary>
        /// 加密解密消息包的工具类.
        /// </summary>
        private static void code(byte[] In, int inOffset, int inPos, byte[] Out, int outOffset, int outPos, byte[] key)
        {
            if (outPos > 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    In[outOffset + outPos + i] = (byte)(In[inOffset + inPos + i] ^ Out[outOffset + outPos + i - 8]);
                }
            }
            uint[] formattedKey = FormatKey(key);
            uint y = ConvertByteArrayToUInt(In, outOffset + outPos);
            uint z = ConvertByteArrayToUInt(In, outOffset + outPos + 4);
            uint sum = 0;
            uint delta = 0x9e3779b9;
            uint n = 16;
            while (n-- > 0)
            {
                sum += delta;
                y += ((z << 4) + formattedKey[0]) ^ (z + sum) ^ ((z >> 5) + formattedKey[1]);
                z += ((y << 4) + formattedKey[2]) ^ (y + sum) ^ ((y >> 5) + formattedKey[3]);
            }
            Array.Copy(ConvertUIntToByteArray(y), 0, Out, outOffset + outPos, 4);
            Array.Copy(ConvertUIntToByteArray(z), 0, Out, outOffset + outPos + 4, 4);
            if (inPos > 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    Out[outOffset + outPos + i] = (byte)(Out[outOffset + outPos + i] ^ In[inOffset + inPos + i - 8]);
                }
            }
        }
        private static void decode(byte[] In, int inOffset, int inPos, byte[] Out, int outOffset, int outPos, byte[] key)
        {
            if (outPos > 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    Out[outOffset + outPos + i] = (byte)(In[inOffset + inPos + i] ^ Out[outOffset + outPos + i - 8]);
                }
            }
            else
            {
                Array.Copy(In, inOffset, Out, outOffset, 8);
            }
            uint[] formattedKey = FormatKey(key);
            uint y = ConvertByteArrayToUInt(Out, outOffset + outPos);
            uint z = ConvertByteArrayToUInt(Out, outOffset + outPos + 4);
            uint sum = 0xE3779B90;
            uint delta = 0x9e3779b9;
            uint n = 16;
            while (n-- > 0)
            {
                z -= ((y << 4) + formattedKey[2]) ^ (y + sum) ^ ((y >> 5) + formattedKey[3]);
                y -= ((z << 4) + formattedKey[0]) ^ (z + sum) ^ ((z >> 5) + formattedKey[1]);
                sum -= delta;
            }
            Array.Copy(ConvertUIntToByteArray(y), 0, Out, outOffset + outPos, 4);
            Array.Copy(ConvertUIntToByteArray(z), 0, Out, outOffset + outPos + 4, 4);
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="input">需要被解密的密文</param>
        /// <param name="key">密钥</param>
        /// <returns>Message 已解密的消息</returns>
        public static byte[] Decrypt(byte[] input, byte[] key)
        {
            return Decrypt(input, 0, input.Length, key);
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="input">需要加密的明文</param>
        /// <param name="key">密钥</param>
        /// <returns>Message 密文</returns>
        public static byte[] Encrypt(byte[] input, byte[] key)
        {
            return Encrypt(input, 0, input.Length, key);
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="In">密文</param>
        /// <param name="offset">密文开始的位置</param>
        /// <param name="len">密文长度</param>
        /// <param name="key">密钥</param>
        /// <returns>返回明文</returns>
        public static byte[] Decrypt(byte[] In, int offset, int len, byte[] key)
        {
            // 因为QQ消息加密之后至少是16字节,并且肯定是8的倍数,这里检查这种情况
            if ((len % 8 != 0) || (len < 16))
            {
                return null;
            }
            byte[] Out = new byte[len];
            for (int i = 0; i < len; i += 8)
            {
                decode(In, offset, i, Out, 0, i, key);
            }
            for (int i = 8; i < len; i++)
            {
                Out[i] = (byte)(Out[i] ^ In[offset + i - 8]);
            }
            int pos = Out[0] & 0x07;
            len = len - pos - 10;
            byte[] res = new byte[len];
            Array.Copy(Out, pos + 3, res, 0, len);
            return res;
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="In">明文</param>
        /// <param name="offset">明文开始的位置</param>
        /// <param name="len">明文长度</param>
        /// <param name="key">密钥</param>
        /// <returns>返回密文</returns>
        public static byte[] Encrypt(byte[] In, int offset, int len, byte[] key)
        {
            Random rand = new Random();
            // 计算头部填充字节数
            int pos = (len + 10) % 8;
            if (pos != 0)
            {
                pos = 8 - pos;
            }
            byte[] plain = new byte[len + pos + 10];
            plain[0] = (byte)((rand.Next() & 0xF8) | pos);
            for (int i = 1; i < pos + 3; i++)
            {
                plain[i] = (byte)(rand.Next() & 0xFF);
            }
            Array.Copy(In, 0, plain, pos + 3, len);
            for (int i = pos + 3 + len; i < plain.Length; i++)
            {
                plain[i] = 0x0;
            }
            // 定义输出流
            byte[] outer = new byte[len + pos + 10];
            for (int i = 0; i < outer.Length; i += 8)
            {
                code(plain, 0, i, outer, 0, i, key);
            }
            return outer;
        }
        //格式化密钥
        private static uint[] FormatKey(byte[] key)
        {
            if (key.Length == 0)
            {
                throw new ArgumentException("Key must be between 1 and 16 characters in length");
            }
            byte[] refineKey = new byte[16];
            if (key.Length < 16)
            {
                Array.Copy(key, 0, refineKey, 0, key.Length);
                for (int k = key.Length; k < 16; k++)
                {
                    refineKey[k] = 0x20;
                }
            }
            else
            {
                Array.Copy(key, 0, refineKey, 0, 16);
            }
            uint[] formattedKey = new uint[4];
            int j = 0;
            for (int i = 0; i < refineKey.Length; i += 4)
            {
                formattedKey[j++] = ConvertByteArrayToUInt(refineKey, i);
            }
            return formattedKey;
        }
        private static byte[] ConvertUIntToByteArray(uint v)
        {
            byte[] result = new byte[4];
            result[0] = (byte)((v >> 24) & 0xFF);
            result[1] = (byte)((v >> 16) & 0xFF);
            result[2] = (byte)((v >> 8) & 0xFF);
            result[3] = (byte)((v >> 0) & 0xFF);
            return result;
        }
        private static uint ConvertByteArrayToUInt(byte[] v, int offset)
        {
            if (offset + 4 > v.Length)
            {
                return 0;
            }
            uint output;
            output = (uint)(v[offset] << 24);
            output |= (uint)(v[offset + 1] << 16);
            output |= (uint)(v[offset + 2] << 8);
            output |= (uint)(v[offset + 3] << 0);
            return output;
        }
    }

您可以选择打赏方式支持楼主

签到天数: 1 天

结帖率:67% (4/6)
发表于 2018-7-22 10:07:08 | 显示全部楼层
已将很不错了
回复

使用道具 举报

签到天数: 16 天

结帖率:100% (8/8)
发表于 2018-7-21 15:59:04 | 显示全部楼层
贴代码还是用代码标签贴吧
回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表 按钮

sitemap|易语言源码|易语言教程|易语言论坛|诚聘英才|易语言模块|手机版|联系我们|精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.2 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125

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