当前位置:编程学习 > C#/ASP.NET >>

求C#DES加密的key可为任意长度字符或为空代码

其它java,C代码的DES的KEY可任意长度字符或为空,现在我使用的C# des加密算法,当key为空时出错,请高手支招,贴出key 可任意长度字符的代码

网上的代码,key不可为空,必须要8位

尹学渊用VC++写的,可key为空,加密结果到到其它工具或其它语言写的工具上去 反解,并且一切正常
尹学渊用VC++写的(http://www.cnblogs.com/erwin/archive/2009/04/14/1435288.html#2346568),key为空得到的密文可到其它标准DES上去反解原文

求key可任意长度或为空的代码,在此拜谢!


大仙们快出来帮忙! --------------------编程问答-------------------- 朋友们快来帮帮我吧,这问题都扰我很久了,谢谢 --------------------编程问答-------------------- 我只做过AES的加密解密 --------------------编程问答-------------------- 分享一下AES的加密解密函数

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace AESTest
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        public byte[] AesEncryptor(byte[] bsFile, string password) 
        {
            AesManaged aes = new AesManaged();
            aes.Key = Encoding.UTF8.GetBytes(this.GetMD5(password));
            aes.IV = Encoding.UTF8.GetBytes(this.GetMD5(password).Substring(8, 16));
            aes.Mode = CipherMode.CBC; 
            aes.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = aes.CreateEncryptor(); 
            return transform.TransformFinalBlock(bsFile, 0, bsFile.Length); 
        }

        public byte[] AesDecryptor(byte[] bsFile, string password) 
        {
            AesManaged aes = new AesManaged();
            aes.Key = Encoding.UTF8.GetBytes(this.GetMD5(password));
            //IV的值与aes.IV的位数相同即可,可以是任何值,作用是防止相同的文本产生相同的密文,固使用随机数生成IV较好
            aes.IV = Encoding.UTF8.GetBytes(this.GetMD5(password).Substring(8, 16));
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = aes.CreateDecryptor();
            return transform.TransformFinalBlock(bsFile, 0, bsFile.Length);
        }

        public string GetMD5(string str) 
        { 
            StringBuilder sb = new StringBuilder();
            foreach (byte b in System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str)))
            {
                sb.Append(b.ToString("X2")); 
            }
            return sb.ToString(); 
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = txt_Encryptor.Text;
            byte[] plainTextbytes = Encoding.UTF8.GetBytes(str);
            byte[] ciphertextbytes = AesEncryptor(plainTextbytes, "这个是加密要的key");
            txt_result.Text = Convert.ToBase64String(ciphertextbytes);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            byte[] ciphertextbytes = Convert.FromBase64String(txt_Decryptor.Text);
            byte[] plainTextbytes = AesDecryptor(ciphertextbytes, "这个是加密要的key");
            txt_result.Text = Encoding.UTF8.GetString(plainTextbytes);
        }
    }
}

--------------------编程问答--------------------
我现在需要C#版的DES加密 代码,要求key可少于8个字符或为空,这一点尹学渊DES工具2.1是实现了,并且同其它标准DES可相互转换 --------------------编程问答--------------------
引用 4 楼  的回复:
我现在需要C#版的DES加密 代码,要求key可少于8个字符或为空,这一点尹学渊DES工具2.1是实现了,并且同其它标准DES可相互转换
只能帮你顶了 DES确实没用过 我也想知道DES加密函数怎么写 如果.net下的des加密key必须不能为空 那么只能纯代码去写DES函数了 不过难度系数可想而知
--------------------编程问答--------------------
引用 4 楼  的回复:
我现在需要C#版的DES加密 代码,要求key可少于8个字符或为空,这一点尹学渊DES工具2.1是实现了,并且同其它标准DES可相互转换


晕!

你上面已经有例子了。很简单,先对密码进行有MD5(或者其它散列)运算。

看到别人给你的例子,如果还忽悠什么“密码可以空、可以任意长度”就应该不好意思了。 --------------------编程问答-------------------- 至于说“并且同其它标准DES可相互转换”,我除了觉得是广告上的莫名其妙的词语,实在是看不出这个叫“尹”什么的一小段代码它有什么“标准”可言。 --------------------编程问答-------------------- 谢谢楼上两位朋友的好心回复,我手上有标准DES的写法,并可与其它语言DES互相转换,但如果为空了,程序就会出错;

这个问题我也在网上找了好几天了,可个人能力有限至今未得到解决,各位大哥们不要嘲笑小弟,我也在学习当中, 如果有朋友知道怎么代码的,出来帖一下; 

谢谢 --------------------编程问答-------------------- 拜见大神们,小民过来学习下。 --------------------编程问答--------------------
真心求教,再顶一下,大仙快出来吧 --------------------编程问答--------------------
真心求教,好心朋友出来支个招吧 --------------------编程问答-------------------- 去下载点代码自己研究研究吧,,,“c# des加密” --------------------编程问答--------------------
我已经研究几天了,还是没找到方向,现在已经在想办法找DES.DLL控件了,但还是没找到一个正确能用的?

OROCHIHeart,谢谢你积极的回复,你有DES控件吗? 在C#里能调用的,谢谢

840272434@qq.com --------------------编程问答-------------------- --------------------编程问答--------------------
有朋友可以解决吗? 提供des.DLL类控件也可以,帮帮忙啊 --------------------编程问答-------------------- 熟悉并掌握.net下提供的des加密类,,,建议只能给到这了 你的情况可能比较特殊吧。。。如果想自己想写这个des加密方法 难度老大了。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,