SHA256 的C语言实现
生活随笔
收集整理的這篇文章主要介紹了
SHA256 的C语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前幾天總結了SHA256的算法原理一文
SHA2系列的原理并不復雜,但是需要注意細節還是挺多的。不少中文博客貼出的代碼都有錯,這兩天也踩了幾個坑。
代碼在這里!!!SHA256的C Code
代碼實現主要依照的這個git倉庫crypto-algorithms,向大家推薦,里面實現了各種加密算法。
代碼正確性的測試
如何測試加密算法是否正確,上一文也提到過
我使用的是一個在線SHA256加密驗證工具
測試了三種不同類型的數據的Hash結果
- 純英文
- 中英文夾雜
- 長消息
邏輯運算
SHA256中使用的所有邏輯運算,使用宏定義的方式實現如下:
#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b)))) #define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b))))#define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z))) #define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) #define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22)) #define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25)) #define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3)) #define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10))算法回顧
這里對SHA256原理進行簡單回顧,方便大家對照源代碼
首先需要將原始消息拆解成512-bit大小的塊
最后單獨甩出的不完整的塊需要被補全,對應代碼中的sha256_final函數
整體的操作是依次對塊進行Hash映射,第i塊映射的結果是第i+1塊的輸入。這個過程在函數sha256_update中完成
第一個塊的輸入是預設好的hash初值,初始化過程對應代碼中的sha256_init函數
最后一個塊的輸出便是最終的數字摘要
而其中最關鍵的操作是這個映射函數Map
其內部也相當于是一個循環加密的過錯,不斷將原始信息進行打亂:
代碼中函數sha256_transform實現了該過程
總結
以上是生活随笔為你收集整理的SHA256 的C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外设驱动库开发笔记29:DS17887实
- 下一篇: 如何开发一个扫雷小游戏?