首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sha256managed解密哈希

使用sha256managed解密哈希
EN

Stack Overflow用户
提问于 2015-05-16 01:35:03
回答 4查看 13.3K关注 0票数 0

嗯,一周前我开始使用c#,我有点困惑。

我从密码学开始,基本上是哈希和盐。

我的老师给我们布置了一些周末做的“作业”,我和所有的同学都很困惑。

我有这个简单的代码:

这个练习包括“解密”一个散列的密码(使用SHA256managed散列),我们知道它是一个4个字符的数字。

我试着用循环和一个接一个地解密所有字符,但我被卡住了,我不知道如何继续。

如果你能帮我做这件事,我将非常感激。

谢谢!

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.IO;

namespace Examen
{
    class Program
    {
        static void Main(string[] args)
        {

            string hashed_password = "YOSGtSkJ41KX7K80FEmg+vme4ioLsp3qr28XU8nDQ9c=";



            Console.ReadLine();
        }


    }
}
EN

回答 4

Stack Overflow用户

发布于 2015-05-16 02:08:34

散列是单向函数。给定密码'1805‘,您将得到'2DOrd5wHHjYbtrSvQ+SyTH6HUDID5z+XV/cV8aYOSzs='.的哈希

您不能倒退:给定散列'2DOrd5wHHjYbtrSvQ+SyTH6HUDID5z+XV/cV8aYOSzs=',,您不能计算密码'1805‘。

但是,您可以尝试所有可能的密码,并查看每个密码的哈希值。然后,您就有了从'0000‘到'9999’的所有可能的哈希的列表。在这种情况下,散列列表中的某个位置是您感兴趣的:'YOSGtSkJ41KX7K80FEmg+vme4ioLsp3qr28XU8nDQ9c='.

你的程序应该会在不到一秒的时间内发现密码。

注意,您的程序必须以与密码相同的格式散列数据,即UTF-16LE编码中的8字节数据。确保您散列的数据格式与密码的散列格式相同,否则您将永远找不到匹配项。

票数 7
EN

Stack Overflow用户

发布于 2015-05-16 01:48:06

您需要做的是计算从0000到9999的所有值的散列,直到找到匹配的散列。

下面是一个方法示例,它将在给定一个字符串的情况下为您计算散列:Obtain SHA-256 string of a string

编辑:这里有一个简单的例子。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace TestConsoleProject
{

class Program
{
        static void Main(string[] args)
        {
            string hashed_password = "YOSGtSkJ41KX7K80FEmg+vme4ioLsp3qr28XU8nDQ9c=";
            int index;

            for(index = 0; index <= 9999; index++)
            {
                if (hashed_password.Equals(sha256_hash(index.ToString("0000"))))
                    break;                            
            }

            Console.WriteLine("Password is: " + index.ToString("0000"));

            Console.ReadLine();
        }

        public static String sha256_hash(String value)
        {
            using (SHA256 hash = SHA256Managed.Create())
            {
                return Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(value.ToCharArray())));
            }
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-16 01:45:44

我可能是错的,但我非常确定不可能解密散列字符串。这就是为什么在数据库中使用sha256或sha512来存储密码的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30265543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档