日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何计算 string 的 crc32 值 ?

發布時間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何计算 string 的 crc32 值 ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • Nick Berardi

請問我如何通過 C# 計算 string 的 crc32 校驗和?

回答區

  • Pete

我一直震撼的一件事就是 .NET 底層框架中居然沒有提供對 CRC32 的直接支持,CRC32 一直都是 ZIP,RAR 壓縮中做校驗和的絕佳方案,在 .NET 中你可以這么使用。

var?crc32?=?new?Crc32(); var?hash?=?String.Empty;using?(var?fs?=?File.Open("c:\\myfile.txt",?FileMode.Open))foreach?(byte?b?in?crc32.ComputeHash(fs))?hash?+=?b.ToString("x2").ToLower();Console.WriteLine("CRC-32?is?{0}",?hash);

更詳細的資料可參考:https://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net 和 https://github.com/damieng/DamienGKit/blob/master/CSharp/DamienG.Library/Security/Cryptography/Crc32.cs

  • SharpC

上面朋友的回答是基于 File 的方式,其實替換成 string 會更加直接,方便,我的項目中定義了一個 Crc32 幫助類,代碼如下:

///?<summary> ///?Performs?32-bit?reversed?cyclic?redundancy?checks. ///?</summary> public?class?Crc32 {#region?Constants///?<summary>///?Generator?polynomial?(modulo?2)?for?the?reversed?CRC32?algorithm.?///?</summary>private?const?UInt32?s_generator?=?0xEDB88320;#endregion#region?Constructors///?<summary>///?Creates?a?new?instance?of?the?Crc32?class.///?</summary>public?Crc32(){//?Constructs?the?checksum?lookup?table.?Used?to?optimize?the?checksum.m_checksumTable?=?Enumerable.Range(0,?256).Select(i?=>{var?tableEntry?=?(uint)i;for?(var?j?=?0;?j?<?8;?++j){tableEntry?=?((tableEntry?&?1)?!=?0)??(s_generator?^?(tableEntry?>>?1))?:?(tableEntry?>>?1);}return?tableEntry;}).ToArray();}#endregion#region?Methods///?<summary>///?Calculates?the?checksum?of?the?byte?stream.///?</summary>///?<param?name="byteStream">The?byte?stream?to?calculate?the?checksum?for.</param>///?<returns>A?32-bit?reversed?checksum.</returns>public?UInt32?Get<T>(IEnumerable<T>?byteStream){try{//?Initialize?checksumRegister?to?0xFFFFFFFF?and?calculate?the?checksum.return?~byteStream.Aggregate(0xFFFFFFFF,?(checksumRegister,?currentByte)?=>?(m_checksumTable[(checksumRegister?&?0xFF)?^?Convert.ToByte(currentByte)]?^?(checksumRegister?>>?8)));}catch?(FormatException?e){throw?new?CrcException("Could?not?read?the?stream?out?as?bytes.",?e);}catch?(InvalidCastException?e){throw?new?CrcException("Could?not?read?the?stream?out?as?bytes.",?e);}catch?(OverflowException?e){throw?new?CrcException("Could?not?read?the?stream?out?as?bytes.",?e);}}#endregion#region?Fields///?<summary>///?Contains?a?cache?of?calculated?checksum?chunks.///?</summary>private?readonly?UInt32[]?m_checksumTable;#endregion }

幫助類定義好后,接下來就可以這么使用了。

var?arrayOfBytes?=?Encoding.ASCII.GetBytes("The?quick?brown?fox?jumps?over?the?lazy?dog");var?crc32?=?new?Crc32(); Console.WriteLine(crc32.Get(arrayOfBytes).ToString("X"));

對了,你可以用 https://crccalc.com/ 以在線的方式來測試你的 crc32 的輸入輸出。

點評區

兩位大佬提供的方式不錯,學習了,最后的 Online :https://crccalc.com/ 太方便了,有興趣可以嘗試一下。

總結

以上是生活随笔為你收集整理的如何计算 string 的 crc32 值 ?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。