http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2058|回复: 5

[基类库] 关于如何使用byte[]加解密的简单问题

[复制链接]
发表于 2014-10-11 07:55:12 | 显示全部楼层 |阅读模式
1金钱
使用 public byte[] Encrypt(byte[] original, byte[] key) 加解密中
            //加密
            MyDll.DEncrypt encrypt = new MyDll.DEncrypt();
            //将 richtextbox1中内容加密
            byte[] jiaomi = encrypt.Encrypt(Encoding.Default.GetBytes( richTextBox1.Text), Encoding.Default.GetBytes("www"));
            //转为 string并显示在richtextbox2中
            richTextBox2.Text = Encoding.Default.GetString(jiaomi);

结果显示,richtextbox2中显示的乱码,无法通过解密解回到原文,请问这样加密正确否?

        private void button6_Click(object sender, EventArgs e)
        {
            //解密
            MyDll.DEncrypt encrypt = new MyDll.DEncrypt();
            byte[] jiemi = Encoding.Default.GetBytes(richTextBox2.Text);
            richTextBox1.Text =Encoding.Default.GetString( encrypt.Decrypt(jiemi, Encoding.Default.GetBytes("www")));
        }



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-10-11 07:57:53 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-10-11 08:09:04 | 显示全部楼层
站长苏飞 发表于 2014-10-11 07:57
http://tool.sufeinet.com/CodePreview/CodeView.aspx?action=view&file=DEncrypt/DEncrypt.cs直接用我的得 ...

用你的之后,加密后的源码变成:
[mw_shl_code=csharp,true]?脀c霯_研綎Z聲k阝蒖x吴疠|氫?J司?魾=].伳E0?g逓銖?ZVDX满?瞅Q唴弥
回复

使用道具 举报

 楼主| 发表于 2014-10-11 08:09:28 | 显示全部楼层
有没有使用字节加解密的例子?
回复

使用道具 举报

发表于 2014-10-11 08:30:01 | 显示全部楼层
那这个应该是编码的问题,你把编码全部修改Utf-8
回复

使用道具 举报

发表于 2014-10-11 10:00:04 | 显示全部楼层
/// <summary>
        /// 3DES加密
        /// </summary>
        /// <param name="Plaintext">明文</param>
        /// <param name="KeyString">密钥</param>
        /// <returns></returns>
        internal static string Encrypt(string Plaintext, string KeyString)
        {
            try
            {
                byte[] Content = Encoding.UTF8.GetBytes(Plaintext);
                byte[] EncryptKey = InitKey(KeyString);

                using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
                {
                    des.Mode = CipherMode.ECB;
                    des.Padding = PaddingMode.PKCS7;

                    //利用反射避开CLR的强制弱密钥判断
                    Type t = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");
                    object obj = t.GetField("Encrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(t);
                    MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);
                    ICryptoTransform enCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { EncryptKey, CipherMode.ECB, null, 0, obj });

                    MemoryStream stream = new MemoryStream();
                    CryptoStream encStream = new CryptoStream(stream, enCrypt, CryptoStreamMode.Write);
                    encStream.Write(Content, 0, Content.Length);
                    encStream.FlushFinalBlock();

                    return Convert.ToBase64String(stream.ToArray());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 3DES解密
        /// </summary>
        /// <param name="Ciphertext">密文</param>
        /// <param name="KeyString">密钥</param>
        /// <returns></returns>
        internal static string Decrypt(string Ciphertext, string KeyString)
        {
            try
            {
                byte[] buffer = Convert.FromBase64String(Ciphertext);
                byte[] DecryptKey = InitKey(KeyString);

                using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
                {
                    des.Mode = CipherMode.ECB;
                    des.Padding = PaddingMode.PKCS7;

                    //利用反射避开CLR的强制弱密钥判断
                    Type t = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");
                    object obj = t.GetField("Decrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(t);
                    MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);
                    ICryptoTransform deCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { DecryptKey, CipherMode.ECB, null, 0, obj });

                    MemoryStream msDecrypt = new MemoryStream(buffer);
                    CryptoStream csDecrypt = new CryptoStream(msDecrypt, deCrypt, CryptoStreamMode.Read);

                    byte[] fromDecrypt = new byte[buffer.Length];
                    csDecrypt.Read(fromDecrypt, 0, fromDecrypt.Length);

                    return Encoding.UTF8.GetString(fromDecrypt);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-30 00:17

© 2014-2021

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