Linux加密框架 crypto 哈希算法举例 MD5
生活随笔
收集整理的這篇文章主要介紹了
Linux加密框架 crypto 哈希算法举例 MD5
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接
- Linux加密框架 crypto 哈希算法說明 同步哈希shash_alg | 異步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的博客-CSDN博客
- Linux加密框架中的主要數據結構(二)_家有一希的博客-CSDN博客
MD5
- ?md5.h - include/crypto/md5.h - Linux source code (v5.15.11) - Bootlin
- ?md5.c - crypto/md5.c - Linux source code (v5.15.11) - Bootlin
屬性信息
- MD5算法實現了init、update、final、export和import等5個算法接口,分別為md5_init、md5_update、md5_final、md5_export和md5_import;
- 2)MD5算法摘要長度為MD5_DIGEST_SIZE(16)字節,算法狀態(即算法運行的上下文)是數據結構struct md5_state的一個實例,外部應用通過算法描述符向算法運行提供上下文環境,因此也是數據結構struct md5_state的一個實例;
- 3)MD5算法算法名為"md5",算法驅動名在注冊時被設置為"md5-generic",算法類型為CRYPTO_ALG_TYPE_SHASH(即同步哈希算法)(存疑),分塊長度為MD5_HMAC_BLOCK_SIZE(64)字節
- md5_state結構體定義在 md5.h頭文件中
- MD5算法運行的上下文空間是數據結構struct md5_state的一個實例,該數據結構定義如下所示
總結?
- ?數據結構md5_state包括哈希計算中間值hash(包含MD5_HASH_WORDS(4)個雙字)、分塊數據block(包含MD5_BLOCK_WORDS(16)個雙字)以及已輸入的消息字節長度byte_count。
- MD5算法的哈希計算是以塊為單位的,計算過程中如果輸入消息不滿一個分塊,則先緩存在block中,直到輸入消息滿一個分塊或調用了final接口才進行哈希計算。
- 在計算過程中,已輸入的消息包括已計算的消息和未計算緩存的消息,因此可通過byte_count值判斷緩存是否已滿一個分塊以及緩存中剩余的空間等。
- 在加密框架定義的算法類型宏如下所示
- ?對外部應用來說,不關心哈希算法的實現方式,因此將使用的哈希算法的算法類型標注為CRYPTO_ALG_TYPE_HASH,如IPSEC將使用的哈希算法標記為CRYPTO_ALG_TYPE_HASH。
- 由定義可知,CRYPTO_ALG_TYPE_SHASH和CRYPTO_ALG_TYPE_AHASH的區別只在最后1位。外部應用(如IPSEC AH協議)使用哈希算法(如"hmac(md5)"算法)時,由于加密框架默認的算法實現方式為異步方式,創建的算法實例是異步哈希算法實例,但實際上并不關心哈希算法的具體實現方式,因此在按照算法名查找算法時,除算法類型type外還需要設置算法類型屏蔽位mask(如CRYPTO_ALG_TYPE_AHASH_MASK(0x0e)),這樣待查找的算法類型為type&mask=0x08(CRYPTO_ALG_TYPE_HASH),不關心哈希算法的具體實現方式,以"hmac(md5)"算法為例,其實現方式為同步方式。
- 分組算法不同,某些外部應用可能調用靜態哈希算法(如MD5算法)計算輸入消息的摘要值(如某些文件的MD5值),但是MD5算法的通用算法說明md5_alg中未設置算法類型常量cra_type,而是在哈希算法注冊的準備階段(shash_prepare_alg函數)統一設置為crypto_shash_type
總結
以上是生活随笔為你收集整理的Linux加密框架 crypto 哈希算法举例 MD5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更该clover软件图标(任务栏显示)
- 下一篇: linux版车机安装步骤,RedHat