有没有C#的des加密ecb加解密的源码呀,我的加密可以解密就不行

dllcash 2015-11-20 01:38:47
ecb加密方法:
public static void Encrypt(string sourceString, string sKey)
{
byte[] bSrc = System.Text.Encoding.Default.GetBytes(sourceString); //获取需要加密数据
byte[] bDes;
byte[] bKey = System.Text.Encoding.Default.GetBytes(sKey); //密钥,
byte[] IV = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //初始化
System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
des.Mode = System.Security.Cryptography.CipherMode.ECB; //加密模式,
//加密
System.Security.Cryptography.ICryptoTransform ct;
System.IO.MemoryStream ms;
System.Security.Cryptography.CryptoStream cs;
ct = des.CreateEncryptor(bKey, IV);

ms = new System.IO.MemoryStream();
cs = new System.Security.Cryptography.CryptoStream(ms, ct, System.Security.Cryptography.CryptoStreamMode.Writ);
cs.Write(bSrc, 0, bSrc.Length);
cs.FlushFinalBlock();
bDes = ms.ToArray(); //这里就是加密的结果. 如果是实时交易,就发送这个结果,如果是文件就把这个写到文件里。
string stxt = "";
for (int i = 0; i < bDes.Length; i++)
{
stxt = stxt + bDes[i].ToString("X2");
}
Console.WriteLine(stxt);
Console.ReadLine();
}
这个加密方法没问题但,解密的就不行了。明文:"{yhwd:\"001\"}" 这个加密后可以。但解不出来。有没有人帮忙写下解密的源我核对下自已的
...全文
172 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dllcash 2015-11-20
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
#5这个是对的啊 #3楼这个,你漏掉了byte[] bDes1 = ms1.ToArray();
我滴个 神啊。一直没看到少了这个,我人都晕了。大哥你太好了。赞一个
本拉灯 2015-11-20
  • 打赏
  • 举报
回复
dllcash 2015-11-20
  • 打赏
  • 举报
回复
解密算法弄出来了。 public static string Decode(string str, string key) { try { DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Mode = CipherMode.ECB; // 密钥 provider.Key = Encoding.Default.GetBytes(key.Substring(0, 8)); // 偏移量 //provider.IV = Encoding.Default.GetBytes(key.Substring(0, 8)); provider.IV = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //初始化 byte[] buffer = new byte[str.Length / 2]; for (int i = 0; i < (str.Length / 2); i++) { int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10); buffer[i] = (byte)num2; } MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write); stream2.Write(buffer, 0, buffer.Length); stream2.FlushFinalBlock(); stream.Close(); return Encoding.Default.GetString(stream.ToArray()); } catch (Exception) { return ""; } } 对。 给分给分大家都有
  • 打赏
  • 举报
回复
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    public static class SecurityHelper
    {
        /// <summary>
        /// 获取32位长度的Md5摘要
        /// </summary>
        /// <param name="inputStr"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static string GetMD5_32(this string inputStr, Encoding encoding = null)
        {
            RefEncoding(ref encoding);
            byte[] data = GetMD5(inputStr, encoding);
            StringBuilder tmp = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                tmp.Append(data[i].ToString("x2"));
            }
            return tmp.ToString();
        }

        private static byte[] GetMD5(string inputStr, Encoding encoding)
        {
            using (MD5 md5Hash = MD5.Create())
            {
                return md5Hash.ComputeHash(encoding.GetBytes(inputStr));
            }
        }

        private static void RefEncoding(ref Encoding encoding)
        {
            if (encoding == null)
            {
                encoding = Encoding.Default;
            }
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="encrypted">加密过的字符串</param>
        /// <param name="key">加密key</param>
        /// <param name="encoding">编码</param>
        /// <returns>解密后的字符串</returns>
        public static string DecryptString(this string encrypted, string key, Encoding encoding = null)
        {
            RefEncoding(ref encoding);
            byte[] buff = Convert.FromBase64String(encrypted);
            //byte[] buff = encoding.GetBytes(encrypted);
            var provider = GetTripleDESCryptoServiceProvider(key, encoding);
            return encoding.GetString(provider.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length));
        }
        private static TripleDESCryptoServiceProvider GetTripleDESCryptoServiceProvider(string key, Encoding encoding)
        {
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            des.Key = GetMD5(key, encoding);
            des.Mode = CipherMode.ECB;
            return des;
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="original">待加密字符串</param>
        /// <param name="key">加密key</param>
        /// <param name="encoding">编码</param>
        /// <returns>加密后的字符串</returns>
        public static string EncryptString(this string original, string key, Encoding encoding = null)
        {
            RefEncoding(ref encoding);
            byte[] buff = encoding.GetBytes(original);
            var provider = GetTripleDESCryptoServiceProvider(key, encoding);
            return Convert.ToBase64String(provider.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length));
            //return encoding.GetString(provider.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length));
        }
    }
Poopaye 2015-11-20
  • 打赏
  • 举报
回复
#5这个是对的啊 #3楼这个,你漏掉了byte[] bDes1 = ms1.ToArray();
dllcash 2015-11-20
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
你解密的时候定义了一个ms2,然而你并没有用到它
ms2 = new System.IO.MemoryStream(); cs2 = new System.Security.Cryptography.CryptoStream(ms2, ct2, System.Security.Cryptography.CryptoStreamMode.Write); 这个应该用的,你看#5楼的嘛,那个是我完全的源码,先的都 是根据这个改的。
dllcash 2015-11-20
  • 打赏
  • 举报
回复
这个是加解密在一个方法里的,可以正常使用,但我把解密弄出来就不对了,好像是我解密的密文转byte[]时就没对了,有没有高手帮我把这个方法改为两个方法,一个加密一个解密的,谢谢了 private static void DesData(string sourceString ,string sKey) { string sourceString1= "{yhwd:\"001\"}";//明文传的这个 Console.WriteLine("加密前明文=" + sourceString1); byte[] bSrc = System.Text.Encoding.Default.GetBytes(sourceString); //获取需要加密数据 byte[] bDes; byte[] bKey = new byte[8] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; //密钥, byte[] IV = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //初始化 System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create(); des.Mode = System.Security.Cryptography.CipherMode.ECB; //加密模式, //加密 System.Security.Cryptography.ICryptoTransform ct; System.IO.MemoryStream ms; System.Security.Cryptography.CryptoStream cs; ct = des.CreateEncryptor(bKey, IV); ms = new System.IO.MemoryStream(); cs = new System.Security.Cryptography.CryptoStream(ms, ct, System.Security.Cryptography.CryptoStreamMode.Write); cs.Write(bSrc, 0, bSrc.Length); cs.FlushFinalBlock(); bDes = ms.ToArray(); //这里就是加密的结果. 如果是实时交易,就发送这个结果,如果是文件就把这个写到文件里。 string stxt = ""; for (int i = 0; i < bDes.Length; i++) { stxt = stxt + bDes[i].ToString("X2"); } Console.WriteLine("加密后密文="+stxt); Console.ReadLine(); //解密 System.Security.Cryptography.ICryptoTransform ct1; System.IO.MemoryStream ms1; System.Security.Cryptography.CryptoStream cs1; ct1 = des.CreateDecryptor(bKey, IV); ms1 = new System.IO.MemoryStream(); cs1 = new System.Security.Cryptography.CryptoStream(ms1, ct1, System.Security.Cryptography.CryptoStreamMode.Write); cs1.Write(bDes, 0, bDes.Length); cs1.FlushFinalBlock(); byte[] bDes1 = ms1.ToArray(); stxt = System.Text.Encoding.Default.GetString(bDes1); Console.WriteLine("解密后明文="+ stxt); Console.ReadLine(); }
Poopaye 2015-11-20
  • 打赏
  • 举报
回复
你解密的时候定义了一个ms2,然而你并没有用到它
dllcash 2015-11-20
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
要不你贴出来你自己的,我帮你看看哪里不对
我发现我应该是加密后的字符串转为byte[]时没有处理对。这个该如何处理 解密 private static void dec(string s,string skey) { //s是加密后的字符串 byte[] bDes; byte[] bKey = System.Text.Encoding.Default.GetBytes(skey); //密钥, byte[] IV = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //初始化 System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create(); des.Mode = System.Security.Cryptography.CipherMode.ECB; //模式, System.Security.Cryptography.ICryptoTransform ct2; System.IO.MemoryStream ms2; System.Security.Cryptography.CryptoStream cs2; ct2 = des.CreateDecryptor(bKey, IV); ms2 = new System.IO.MemoryStream(); cs2 = new System.Security.Cryptography.CryptoStream(ms2, ct2, System.Security.Cryptography.CryptoStreamMode.Write); byte[] bDes2 = new byte[s.Length / 2]; for (int i = 0; i < s.Length / 2; i++) { bDes2[i] = Convert.ToByte(p.Substring(i * 2, 2), 16); } cs2.Write(bDes2, 0, bDes2.Length); cs2.FlushFinalBlock(); string stxt2 = System.Text.Encoding.Default.GetString(bDes2); Console.WriteLine(stxt2); Console.ReadLine(); }
huier513 2015-11-20
  • 打赏
  • 举报
回复
md5可以?
Poopaye 2015-11-20
  • 打赏
  • 举报
回复
要不你贴出来你自己的,我帮你看看哪里不对

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧