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

MD5密码只有8位在数据库里

Access数据库里的密码为什么只有8位啊?
这里有一段代码
public static string Md5(string Str)
        {
            if (Str != null && Str != "")
            {
                Str = FormsAuthentication.HashPasswordForStoringInConfigFile(Str.Trim(), "MD5");
                Str = Str.Substring(8, 16).ToLower();
            }
            return Str;
        }

Str = Str.Substring(8, 16).ToLower(); 这段代码是把用MD5加密的代码只取从第8位到16位的密码存入数据库吗?我现在要从这些加密的代码中反编译出真实的密码。可是这里只有8位。怎么找出另外的8位啊?
--------------------编程问答-------------------- 神乎其神¥¥¥¥ --------------------编程问答-------------------- md5不是总共只有8位吧?
普通情况下是32位的。
Str = FormsAuthentication.HashPasswordForStoringInConfigFile(Str.Trim(), "MD5");
上面的代码就是经过处理的全部密码的嘛,根本不需要你这8位、那8位然后凑一块处理的。
如果你想部分结果,也可以采用SubString(m,n)来做嘛。
MD5在常规情况下是不能反编译出真实密码的,不过网上有这方面的网址,好像是www.md5.org。 --------------------编程问答-------------------- MD5不可逆吧 --------------------编程问答-------------------- Str = FormsAuthentication.HashPasswordForStoringInConfigFile(Str.Trim(), "MD5");
这个就是全部啊
--------------------编程问答-------------------- 传说! --------------------编程问答-------------------- 大家不要灌水了。在线等。急等解决方法啊。为什么数据库里的只有8位啊。。。 --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace MD5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text=GetMd5Str(textBox1.Text.Trim());
        }
        /**/
        /// <summary>
        /// MD5 16位加密
        /// </summary>
        /// <param name="ConvertString"></param>
        /// <returns></returns>
        public static string GetMd5Str(string ConvertString)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
            t2 = t2.Replace("-", "");
            return t2;
        }
        /**/
        /// <summary>
        /// MD5 32位加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string UserMd5(string str)
        {
            string cl = str;
            string pwd = "";
            string temp = "";
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                temp=s[i].ToString("X");
                if(temp.Length<2)
                    temp="0"+temp;
                pwd = pwd + temp;
            }
            return pwd;
        }
        private void button2_Click(object sender, EventArgs e)
        {

            textBox3.Text = UserMd5(textBox1.Text.Trim()); 

        }


    }
}
--------------------编程问答-------------------- 字符串长度 --------------------编程问答-------------------- 没办法。。。 它只存储了8位,鬼也不可能知道剩余的24位是什么~ 这个难度太大了。。  不知道只存储8位会不会有重复。。 --------------------编程问答-------------------- Str = Str.Substring(8, 16).ToLower(); 这段代码是把用MD5加密的代码从第7位(索引从0开始)起取后面的16位并转变成小写

MD5你反编译不了!!! --------------------编程问答--------------------
引用 10 楼 zqtoo 的回复:
Str = Str.Substring(8, 16).ToLower(); 这段代码是把用MD5加密的代码从第7位(索引从0开始)起取后面的16位并转变成小写

 MD5你反编译不了!!!

哦。我真是太菜了。 --------------------编程问答--------------------
引用 10 楼 zqtoo 的回复:
Str = Str.Substring(8, 16).ToLower(); 这段代码是把用MD5加密的代码从第7位(索引从0开始)起取后面的16位并转变成小写

 MD5你反编译不了!!!

那我放弃了。哎!!1 --------------------编程问答--------------------
引用 7 楼 yupengcheng_net 的回复:
C# codeusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Security.Cryptography;namespace MD5
{publicpartialclass Form1 : Form
    {public Form1()
        {
            InitializeComponent();
        }privatevoid button1_Click(object sender, EventArgs e)
        {
            textBox2.Text=GetMd5Str(textBox1.Text.Trim());
        }/**////<summary>/// MD5 16位加密///</summary>///<param name="ConvertString"></param>///<returns></returns>publicstaticstring GetMd5Str(string ConvertString)
        {
            MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();string t2= BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)),4,8);
            t2= t2.Replace("-","");return t2;
        }/**////<summary>/// MD5 32位加密///</summary>///<param name="str"></param>///<returns></returns>staticstring UserMd5(string str)
        {string cl= str;string pwd="";string temp="";
            MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择byte[] s= md5.ComputeHash(Encoding.UTF8.GetBytes(cl));// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得for (int i=0; i< s.Length; i++)
            {// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符                temp=s[i].ToString("X");if(temp.Length<2)
                    temp="0"+temp;
                pwd= pwd+ temp;
            }return pwd;
        }privatevoid button2_Click(object sender, EventArgs e)
        {

            textBox3.Text= UserMd5(textBox1.Text.Trim()); 

        }


    }
}

老兄。这什么意思啊。。。 --------------------编程问答-------------------- 这个是MD5加密的两个方法,一个是加密成16位,一个是32位,
UserMd5(textBox3.Text);就行! --------------------编程问答-------------------- 位 和 字节 都不分的, 还大有人在. --------------------编程问答-------------------- 为了这个,我决定认真学习C#和加密解密。那么我到数据库就不能修改密码了? --------------------编程问答--------------------
引用 16 楼 izon90 的回复:
为了这个,我决定认真学习C#和加密解密。那么我到数据库就不能修改密码了?

好好学习吧,最好你发明个加密算法,你就不用来CSDN了 --------------------编程问答-------------------- 看回复后,有点晕! --------------------编程问答-------------------- 慢慢理解 --------------------编程问答-------------------- MD5不可逆啊 谁能解密? --------------------编程问答--------------------
引用 15 楼 dobzhansky 的回复:
位 和 字节 都不分的, 还大有人在.

MD5结果是128位二进制,16字节,转为16进制是长度32的字符串~ --------------------编程问答-------------------- 只8位的话,发生碰撞的可能性大大提高 --------------------编程问答-------------------- MD5不可逆,取出一部分8位存在数据库是为了防止被入侵数据全部被copy? --------------------编程问答--------------------
引用 16 楼 izon90 的回复:
为了这个,我决定认真学习C#和加密解密。那么我到数据库就不能修改密码了?

那你不应该学习C#和加密解密...学了也没用,要去学应用数学,等你考上山东大学王小云教授的博士生就知道MD5碰撞是怎么回事儿了...不过那时你就会认为修改密码这种事是非常低级不值一晒了... --------------------编程问答-------------------- 搞数论和密码研究的人,思维迥异于常人,基本上无异于出家当和尚。

LZ还是远离比较好

曾经看到王小云出席过一期娱乐节目,盛赞柳云龙的《暗算》关于密码破译部分很专业。。。

我当时笑了。 --------------------编程问答--------------------
引用 15 楼 dobzhansky 的回复:
位 和 字节 都不分的, 还大有人在.

不只是“位 和 字节 都不分”...大都在拿16进制文本形式的字符个数当“位”,至于字节就更扯不上了... --------------------编程问答--------------------
引用 25 楼 v68v6 的回复:
搞数论和密码研究的人,思维迥异于常人,基本上无异于出家当和尚。

LZ还是远离比较好

曾经看到王小云出席过一期娱乐节目,盛赞柳云龙的《暗算》关于密码破译部分很专业。。。

我当时笑了。

客套话还是要讲的...再说柳虽然有些装B但暗算无疑是同类型片中最专业的了,至少不离谱... --------------------编程问答-------------------- 这倒是

暗算也算是其巅峰之作,当初是一集不漏的看完的。柳后面的片子就不太好说什么了。。。

柳据说是北影史上专业和形象都拿满分仅有的2人之一,在暗算中即便装点B也还是很拉风。。。呵呵。。。 --------------------编程问答-------------------- http://topic.csdn.net/u/20091015/10/633c74bb-101f-4aa5-ae02-0334f5e238b2.html

看3楼的回复  你就知道你要怎么改密码了 --------------------编程问答-------------------- 这算法太高深了啊! 你是截取字符串放进去的,这下你要反编译,我想的话,你只能这样,获取输入的密码,加密后,然后把加密的字符串和数据库的对比,这样应该是可以的了。。。。 --------------------编程问答-------------------- 8位啊,直接暴力破解 --------------------编程问答-------------------- 问题不出在MD5算法上,问题出在你存储密码到数据库的环节…… --------------------编程问答-------------------- 反编译……暴力破解吧,写个网格程序,我电脑空着没事的时候也帮你破 --------------------编程问答-------------------- 汗,MD5本来就是不可逆的,严格来说并不算加密算法,只能用来验证而已经 --------------------编程问答-------------------- 先不说可不可以破解了。我想搞清楚,那段代码到底是不是只存入8位啊。那么如果登录验证数据库里的密码,它只有8位,不全啊。怎么验证啊。我看源代码的updatepassword function里,就是更新数据库来的。没有Substring(8, 16).ToLower();密码。但是,。。。我搞不清楚了。大家继续灌水吧。
--------------------编程问答--------------------
引用 35 楼 izon90 的回复:
先不说可不可以破解了。我想搞清楚,那段代码到底是不是只存入8位啊。那么如果登录验证数据库里的密码,它只有8位,不全啊。怎么验证啊。我看源代码的updatepassword function里,就是更新数据库来的。没有Substring(8, 16).ToLower();密码。但是,。。。我搞不清楚了。大家继续灌水吧。

再检查你数据库写入代码或数据库字段大小吧。如果字段参数设置了8位或数据库字段大小为8位的话存储的就是密码的前8位了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,