C#的MD5计算问题
我正在使用VSTS 2008 + C# + .NET 3.0.我想找到最有效的方法来计算TXT文件的整个内容的MD5结果. 什么是最有效的解决方案? 解决方案 像: 一样简单的东西 using (Stream stream = File.OpenRead(filename)) using (MD5 md5 = MD5.Create()) { return md5.ComputeHash(stream); } 鉴于无法避免阅读流的每个字节,我怀疑您会发现任何更有效的东西. 其他解决方案 这可能有效: string hash=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(System.IO.File.ReadAllText(filename), "MD5")
14 2024-04-25
编程技术问答社区
MD5在C#和golang之间不一致
我正在尝试从C#移植算法.我需要的一个步骤是采用一系列字节的MD5.我似乎无法在C#和GO实施之间获得一致的哈希. 在c#中我可以做:new MD5CryptoServiceProvider().ComputeHash(new byte[] { 5 })) 我得到[139 182 193 120 56 100 63 150 145 204 106 77 230 197 23 9] 在GO中:md5.New().Sum([]byte{5}) 屈服:[5 212 29 140 217 143 0 178 4 233 128 9 152 236 248 66 126] 我在做一些事情,还是实现实际上是不同的.我需要能够在Go侧复制C#行为. 我有一些小提琴,可用于 go 和 c#如果要检查我的整个实现. 解决方案 您正在滥用输入到总和函数.要总和的输入参数用于存储输出,而不是作为哈希的输入.直接使用md5.Sum(按照您想要的行为)或写入返回的哈希对
16 2024-04-25
编程技术问答社区
停止使用文件流的散列操作
我的代码计算给定输入文件的MD5哈希. public static String ComputeMD5(String filename) { using (var md5 = MD5.Create()) { try { using (var stream = File.OpenRead(filename)) { return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower(); } } catch (Exception) { // File is not a
8 2024-04-25
编程技术问答社区
使用哈希码检测List<string>中的一个元素是否发生了变化的例子 C#
我有一个列表,该列表根据某些XML元素的LINQ查询每分钟更新. XML不时更改.有人建议我,我可以使用哈希码来确定列表中的任何字符串是否已更改. 我已经看到了一些仅针对字符串的MD5 hashcode计算的示例,但没有为列表... 我尝试了一些简单的东西,例如int test = list1.gethashcode;但是,无论列表中的内容如何... 中的代码都是相同的 这是链接查询的整个方法,所有方法在末尾注意: private void GetTrackInfo() { _currentTitles1.Clear(); var savedxmltracks = new XDocument(); listBox1.Items.Clear(); WebClient webClient = new WebClient(); XmlDocument xmltra
14 2024-04-25
编程技术问答社区
C#-没有元数据的MS Office文档的哈希内容
我正在尝试识别具有重复内容的文件.决定使用哈希机制(MD5,SHA1或任何其他)进行比较.使用" .txt"文件可以正常工作.但是,使用MS Office文件(.doc,.docx,.xls等),这将失败. md5/sha1哈希对于MS Office文件不是恒定的,即使它们具有相同的"文本"内容.我假设MS Office在文件中存储某种元数据,每次保存文件时会更改.因此,哈希是不同的. 例如.我有一个文件abc.doc,并为其计算哈希(hash1).打开并更改1个字并保存文件.取消您所做的更改,并保存和计算哈希(Hash2). Hash1!= Hash2在这种情况下.如果您在" .txt"文件 上尝试此操作是一样的 有没有办法根据哈希内容来删除MS Office文档?我们只能哈希只有文件的内容,而不是其meta-data? 解决方案 我认为如果不使用工具提取文档的文本然后将文本放置,则无法完成.我可以推荐外面的恒星,现在由Oracle拥有.但这可能是满足您需求的过
16 2024-04-25
编程技术问答社区
C#-从自身计算md5以检查文件是否被修改
我想检查我的程序是否未经修改(破解). 所以我希望程序从自我exe中计算MD5并比较. if(GetMD5FromSelf() != "hash") Application.Exit(); //modified so exit 但是,当我将哈希列入字符串时,则文件的MD5将被更改. 有什么方法可以做到吗? 解决方案 这些是您可以做的一些方法, 选项1 您可以在线存储Hash,这可能更安全,因为如果有人要更改您的程序,他们也可以更改Hash. 选项2 您可以在应用程序的末尾添加4个字节和一个字符串,并保存在此处的校验和,请注意不要将其包括在校验和中,而仅验证您自己的文件大小,而不是4个字节和字符串. 代码段 List total = new List(File.ReadAllBytes(System.Reflection.Assembly.GetEntryAssembly().Location
16 2024-04-25
编程技术问答社区
将带有HASH MD5的字符串转换为ToBase64String
这是我的问题, 我有此代码,该代码接受带有密码的干净文本并返回base64md5哈希 private static string GetMd5Base64Pass(string userpwd) { MD5 md5 = new MD5CryptoServiceProvider(); return Convert.ToBase64String(md5.ComputeHash(Encoding.ASCII.GetBytes(userpwd))); } 我需要重复使用它来接受MD5字符串哈希并在base64md5中返回. 我试图这样做: private static string GetMd5Base64PassMD5(string userpwd) { MD5 md5 = new MD5CryptoServiceProvider(); return Conve
12 2024-04-24
编程技术问答社区
MD5不存在于System.Security.Cryptography命名空间中。
我利用Visual Studio 2010在C#(带有Silverlight)中编写一个简单的应用程序,以从字符串中获取MD5代码. 我包括 system.security.cryptography ,但我有错误的错误. 你能帮助我吗? 谢谢. 解决方案 MD5类仅在.NET框架中可用,而不是在Silverlight中.如果您绝对必须使用MD5,则必须通过外部开发的MD5实现,例如这个. 最好是,如果这是您的选项,请考虑使用 SHA1 SHA1 SHA1 . SHA1既是更安全的哈希功能(根据当今标准,MD5实际上并不认为是安全的)和在Silverlight中可用.
18 2024-04-23
编程技术问答社区
试图在C#中重现PHP'的pack("H*")函数
这是我在C#中的代码: public static String MD5Encrypt(String str, Boolean raw_output=false) { // Use input string to calculate MD5 hash String output; MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(str); byte[] hashBytes = md5.ComputeHash(inputBytes); // Convert the byte array to hexadecimal string StringBuilder sb = new String
10 2024-04-23
编程技术问答社区
为什么我从c#到js得到不同的MD5哈希值?
我有一个用于加密密码的C#函数: 在 System.Security.Cryptography.MD5CryptoServiceProvider _md5Provider = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] bs = System.Text.Encoding.UTF8.GetBytes(_password); bs = _md5Provider.ComputeHash(bs); System.Text.StringBuilder s = new System.Text.StringBuilder(); foreach (byte b in bs) { s.Append(b.ToString("x2").ToLower
12 2024-04-21
编程技术问答社区
如何将MD5哈希值转换为字符串并将其作为文件名使用
我正在使用图像文件的MD5哈希,我想将哈希作为文件名. 如何将哈希人转换为有效文件名的字符串? 编辑:toString()只给出" system.byte []" 解决方案 怎么样: string filename = BitConverter.ToString(yourMD5ByteArray); 如果您喜欢没有连字符的较​​短文件名,则可以使用: string filename = BitConverter.ToString(yourMD5ByteArray).Replace("-", string.Empty); 其他解决方案 system.convert.convert.tobase.tobase64String 正如评论者指出的那样 - 正常的基础64编码可以包含一个'/'字符,这将是文件名的问题.但是,还有其他可用的字符,例如下划线 - 只需用下划线替换所有"/". string filename = Conver
8 2024-04-20
编程技术问答社区
在C#中给定一个密钥的MD5哈希算法
我一直在寻找一种使用预定键的C#中的给定字符串的方法. 在我通过Internet的冒险经历试图找到一个示例中,我看到了许多MD5CryptoServiceProvider的示例,这些示例似乎使用了机器的默认密钥,但没有一个应用特定键.我需要有一个特定键来编码数据以将其同步到他人的服务器.我将它们递给他们一个Hashed String和一个ID号,他们使用分析数据并将类似集的集合返回给我.因此,无论如何是否可以通过与两者一致的特定键将MD5进行哈希. 我希望在C#中完成此操作,但是如果库无法使用,您可以使用某些网络语言(例如PHP或ASP)进行操作? 编辑:误解了我被扔进的场景,并在坐了一点坐下来思考为什么他们会让我使用钥匙,看来他们希望将密钥附加到弦的末端并进行哈希.这样,服务器可以附加其拥有的密钥以及传递的数据,以确保其有效的访问计算机.无论如何...谢谢所有 ^_ ^ edit2:正如我下面的评论所说,这是我遗忘的"盐"一词.哦,没有指示的新事物的乐趣.
14 2024-04-20
编程技术问答社区
我应该对表中的密码字段使用什么,是MD5还是SHA1?
我绝不是安全专家,甚至是新手.我最多是安全的新手. 有人建议我使用SHA1而不是MD5-为什么我选择另一个?一个更安全吗? 解决方案 我将最小使用SHA2(256) - 但是: 由于彩虹表攻击.同样,盐的散列更好,但是如果有人可以访问您的数据库,那么他们有可能访问您的代码,在这种情况下,他们可能可以拆卸固定盐.同样,如果您使用随机盐,则无论如何都将其存储在行中,因此,尽管它会使人们放慢脚步,但他们仍然可以用彩虹桌攻击它. 一个更好的解决方案是使用密码拉伸使用随机盐以及随机的(高)迭代数量,以便尝试针对每个密码进行蛮力攻击需要更长的时间,因此使所有密码在物理上更难. 我相信.net可以使用PBKDF来实现这一点 - 但我误导了它(有人向我提供了我不久前问的问题的答案). edit-found .net 的链接: MD5 确实已经显示出MD5被证明是"破碎"的,这是我不使用它的主要原因 - 以及为什么我读到它不可避免的是使用它 - 是因为它实际上非常非常
10 2024-04-20
编程技术问答社区
通过计算它们的MD5获得重复文件列表
我有一个包含文件路径的数组,我想将列表列出一个根据其MD5复制的文件.我这样计算他们的MD5: private void calcMD5(Array files) //Array contains a path of all files { int i=0; string[] md5_val = new string[files.Length]; foreach (string file_name in files) { using (var md5 = MD5.Create()) { using (var stream = File.OpenRead(file_name)) { md5_val[i] = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToL
4 2024-04-19
编程技术问答社区
C#计算打开的文件的MD5?
我如何计算流程打开或使用的文件的MD5哈希? 文件可以是txt或exe 我当前的代码返回错误,因为它正在运行 这是我当前的代码 public static string GetMd5HashFromFile(string fileName) { FileStream file = new FileStream(fileName, FileMode.Open); MD5 md5 = new MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(file); file.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i
16 2024-04-18
编程技术问答社区
Silverlight中的MD5哈希值
我正在处理Windows Phone 7应用程序.我正在使用此实现用于Silverlight的MD5哈希. 我正在使用此代码 - protected string GetMD5Hash(string input) { byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); MD5Managed md5 = new MD5Managed(); byte[] hash = md5.ComputeHash(bs); StringBuilder sb = new StringBuilder(); foreach (byte b in bs) { sb.Append(b.ToString("x2").ToLower()); } return sb.ToString
18 2024-04-18
编程技术问答社区
更快的MD5替代品?
我正在研究一个程序,该程序搜索给定文件的整个驱动器.目前,我为已知文件计算一个MD5哈希,然后递归扫描所有文件,寻找匹配. 唯一的问题是MD5在大文件上痛苦较慢.我可以使用更快的替代方案,同时保留了很小的假阳性的可能性? 所有代码都在C#. 中 谢谢. 更新 我已经读到,即使是MD5也可以很快,并且磁盘I/O应该是限制因素.这使我相信我的代码可能不是最佳的.这种方法有任何问题吗? MD5 md5 = MD5.Create(); StringBuilder sb = new StringBuilder(); try { using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read)) { foreach (byte b in md
24 2024-04-18
编程技术问答社区
在C#中存储用MD5CryptoServiceProvider散列的密码是否安全?
我们将哈希密码存储在数据库表中. 我们使用随机的盐值准备了每个密码,并使用md5cryptoserviceprovider进行哈希. 这是安全的吗?我听说MD5被"破碎". 如果没有,您可以建议使用替代哈希方法(特定.NET框架类)吗? 解决方案 我认为SHA256,SHA512此时更安全:) 请参阅 wiki 其他解决方案 哈希功能的安全性主要来自其输出的长度(消息摘要):较长的摘要具有更大的碰撞电阻.生日悖论告诉我们,平均而言,您期望从消化尺寸的平方根的工作函数中找到碰撞:换句话说,给定128位的消化,攻击者希望在2^^^^^^^^^^^时击中Paydirt 64个试验. MD5已被密码界皱眉了几年,因为它只有128位的消化,而且还有一些有趣的隐式分析结果,可以有效地降低其强度. SHA1(160位摘要)是首选的选择,但即使那样,它似乎还不够长,对于一个动机的对手来说还不够,并且在研究社区中也有一些有趣的结果. SHA-2家族(从224到
8 2024-04-18
编程技术问答社区
这是一个用MD5加密密码的好方法吗?
我以前从未对密码进行加密,这是我想到的,借助本文.文章不包括盐,所以我必须自己弄清楚: UTF8Encoding encoder = new UTF8Encoding(); byte[] salt = new byte[8]; new Random().NextBytes(salt); byte[] encodedPassword = encoder.GetBytes(txtPassword.Text); byte[] saltedPassword = new byte[8 + encodedPassword.Length]; System.Buffer.BlockCopy(salt, 0, saltedPassword, 0, 8); System.Buffer.BlockCopy(encodedPassword, 0, saltedPassword, 8, encod
8 2024-04-17
编程技术问答社区
java和.net中的加密结果不一样
我在.NET项目中有一个方法来加密密码 public string Encrypt(string plainText) { string PassPhrase = "#$^&*!@!$"; string SaltValue = "R@j@}{BAe"; int PasswordIterations = Convert.ToInt32(textBox5.Text); //amend to match java encryption iteration string InitVector = "@1B2c3D4e5F6g7H8"; int KeySize = 256; //amend to match java encryption key size byte[] initVectorBytes = Encoding.ASCII.GetBytes(InitVector); byte[] saltValueBytes = Enco
16 2024-04-16
编程技术问答社区