|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你觉得数据库怎么样?从GitTipoftheWeek:Objects一文中得知,Git是如许盘算提交内容的Hash值的:
- Hash算法用的是SHA1
- 盘算前,会在内容后面增加"blob内容长度0",0暗示的是空字符(NUL)。
- 盘算出来的Hash值是40位16进制序列(40-characterhexadecimalsequence)。
好比提交一个空文件,Git盘算出来的Hash值是e69de29bb2d1d6434b8b29ae775ad8c2e48c5391,实践盘算的内容是"blob00"。
在Mac的Terminal中输出命令:echo-en"blob00"|shasum,盘算出来也是一样的Hash值。
那在C#中怎样以一样的办法盘算Hash值呢?
- SHA1Hash算法——C#中对应的完成是SHA1Managed。
- 和Git一样在内容后面增加字符串——string.Format("blob{0}0{1}",Content.Length,Content);
- 天生40位16进制的Hash值——ToString("x2")。
详细完成代码以下:
- publicclassAutosave{publicstringContent{get;set;}publicstringHash{get;set;}publicvoidGenerateHash(){varcomputedContent=string.Format("blob{0}0{1}",Content.Length,Content);varhashBytes=newSHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(computedContent));varsb=newStringBuilder();for(inti=0;i<hashBytes.Length;i++){sb.Append(hashBytes[i].ToString("x2"));}this.Hash=sb.ToString();}}
复制代码
测试代码以下:
- publicclassAutosaveTest{[Fact]publicvoidGenerateHash_Test(){varautosave=newAutosave();autosave.Content="";autosave.GenerateHash();Assert.Equal("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",autosave.Hash);}}
复制代码
测试了局:- 1passed,0failed,0skipped,took1.13seconds(xUnit.net1.9.2build1705).
复制代码 弄定!
也不知道,我同学昨天说数据挖掘很好。 |
|