C C 實現乙個可操作的MD5演算法程式

2021-08-17 03:37:49 字數 1782 閱讀 5654

獲得乙個待壓縮的文字

初始化,暫存器(a, b, c, d)置16進製制初值作為初始向量iv

padding,在原始訊息資料尾部填充標識100…0

transform,4輪迴圈,fghi

輸出壓縮後的文字

*過程中,涉及encode和decode,具體見關鍵實現**

private:

ulong _state[4]; /* state (abcd) */

ulong _count[2]; /* number of bits, modulo 2^64 (lsb first) */

byte _buffer[64]; /* input buffer */

byte _digest[16]; /* message digest */

bool _finished; /* calculate finished ? */

static

const

byte padding[64]; /* padding for calculate */

static

const

char hex[16];

static

const size_t buffer_size = 1024;

大部分**實現參照初始化

md5是一種資訊摘要演算法,主要是通過特定的hash雜湊方法將文字資訊轉換成簡短的資訊摘要,所以md5並不是一種加密演算法。但是由於乙個md5理論上可能對應無數多個原文的,比如主流使用的md5將任意長度的「位元組串對映為乙個128bit的大整數。也就是一共有2^128種可能,大概是3.4*10^38,這個數字是有限多個的,而世界上可以被用來加密的原文則會有無數的可能性,因此md5被認為是不可逆的,即無法通過摘要後的文字推出原文本。舉個例子,當我們使用使用者名稱和密碼登陸時,會再加密一次使用者輸入的資料,然後與資料庫中已加密的資料進行對比,如果比對結果一致,就可以判定登陸成功。考慮資料庫中的資料,如果存的是明文,如果資料庫被黑了,那麼明文密碼直接洩露。但如果存的是md5值,即使洩露也無法直接用來登入相關賬戶,因為無法根據md5值推出明文,所以提供了一定程度上的密碼保護。

Java實現乙個MD5工具類

利用jdk封裝乙個簡易的md5工具類,邏輯比較簡單,直接貼下具體實現 public static string ge 5 string content result sb.tostring catch nosuchalgorithmexception e return result test pub...

MD5演算法JAVA的實現

稍微有點複雜,好像有多種hash方式,僅會這種,用的時候整篇 copy即可。import com.hh.framework.core.notsupportedexception 自己框架定義的異常,可以在catch notsupportedexception異常的地方替換成自己定義的異常 publi...

分享乙個MD5加密工具類

一直都有分享這個工具類的想法,只是礙於沒有時間整理,所以一直沒有把 貼出來。這是乙個個人認為非常好用的使用md5 salt加密的工具類,一部分 由網上搜尋而得,一部分自己修改新增之後而得。使用這個工具類,非常簡單,從前台拿到密碼passwd,直接hexutil.getencryptedpwd pas...