亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++如何實(shí)現(xiàn)sha256算法

 更新時(shí)間:2024年07月27日 14:48:45   作者:希望睿智的技術(shù)小屋  
SHA-256算法由于其強(qiáng)大的安全性,已成為國際標(biāo)準(zhǔn)和許多安全協(xié)議的推薦算法,在密碼存儲(chǔ)、數(shù)字簽名、區(qū)塊鏈技術(shù)、SSL/TLS協(xié)議、數(shù)據(jù)完整性驗(yàn)證、系統(tǒng)安全審計(jì)等眾多應(yīng)用領(lǐng)域,SHA-256算法都至關(guān)重要,這篇文章主要介紹了C++如何實(shí)現(xiàn)sha256算法,需要的朋友可以參考下

概述

SHA-256,英文全稱為Secure Hash Algorithm 256-bit,是一種廣泛使用的密碼散列函數(shù),屬于SHA-2家族。SHA-256算法由美國國家安全局(NSA)設(shè)計(jì),并由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年發(fā)布。SHA-256算法主要用于提供數(shù)據(jù)完整性校驗(yàn)和安全認(rèn)證,生成一個(gè)固定長(zhǎng)度為256位(即32字節(jié))的散列值,通常以64個(gè)字符的十六進(jìn)制字符串形式表示。

SHA-256算法主要有以下4個(gè)特點(diǎn)。

1、安全性:SHA-256設(shè)計(jì)用于達(dá)到至少128位的安全強(qiáng)度,這意味著,找到兩個(gè)不同的輸入產(chǎn)生相同哈希值的難度非常大,理論上需要進(jìn)行2^128次嘗試,這在當(dāng)前計(jì)算能力下是不可行的。

2、不可逆性:SHA-256是一種單向散列函數(shù),意味著從散列值很難推算出原始輸入數(shù)據(jù)。

3、確定性:對(duì)于相同的輸入數(shù)據(jù),無論何時(shí)何地執(zhí)行SHA-256算法,都將得到完全相同的哈希值。

4、輸入敏感性:即使是輸入數(shù)據(jù)的微小改變,也會(huì)導(dǎo)致輸出哈希值的巨大變化,這稱為雪崩效應(yīng)。

CHP_Sha256

為了方便使用SHA-256算法,我們封裝了CHP_Sha256類。這個(gè)類是一個(gè)接口類,不需要實(shí)例化。因此,我們將構(gòu)造函數(shù)和析構(gòu)函數(shù)聲明成了私有的。CHP_Sha256類的頭文件,可參考下面的示例代碼。

#pragma once
#include "HP_Types.h"
#define HP_SHA256_HASH_LEN                                        32
class CHP_Sha256
{
public:
        static int CalcSha256(char *pData, unsigned int uiDataLen, unsigned char pucResult[HP_SHA256_HASH_LEN]);
        static int CalcHmacSha256(char *pKey, unsigned int uiKeyLen, char *pData, unsigned int uiDataLen, unsigned char pucResult[HP_SHA256_HASH_LEN]);
private:
        CHP_Sha256();
        ~CHP_Sha256();
        typedef struct _THPSha256Context
        {
                HP_U64 ui64Len;
                unsigned int puiState[8];
                unsigned int uiCurLen;
                unsigned char pucBuf[64];
        } THPSha256Context;
        static void Init(THPSha256Context *pContext);
        static void Update(THPSha256Context *pContext, void *pBuf, unsigned int uiBufLen);
        static void Final(THPSha256Context *pContext, unsigned char pucResult[HP_SHA256_HASH_LEN]);
        static void Transform(THPSha256Context *pContext, unsigned char *pucBuf);
        static int Hash(unsigned char *pX, unsigned int uiXLen, unsigned char *pY, unsigned int uiYLen, unsigned char *pOut, unsigned int uiOutLen);
        static void Sha256(char *pData, unsigned int uiDataLen, unsigned char *pResult, unsigned int uiResultLen);
};

CHP_Sha256類的接口比較簡(jiǎn)單,下面我們逐一介紹。

CalcSha256:計(jì)算sha256。參數(shù)pData為輸入數(shù)據(jù)buffer,參數(shù)uiDataLen為輸入數(shù)據(jù)的長(zhǎng)度,參數(shù)pucResult 為計(jì)算結(jié)果值,用于傳出。返回值為0表示成功,其他為錯(cuò)誤碼。

CalcHmacSha256:計(jì)算hmac-sha256。參數(shù)pKey為密鑰buffer,參數(shù)uiKeyLen為密鑰的長(zhǎng)度,這兩個(gè)參數(shù)與HMAC有關(guān)。參數(shù)pData為輸入數(shù)據(jù)buffer,參數(shù)uiDataLen為輸入數(shù)據(jù)的長(zhǎng)度,參數(shù)pucResult 為計(jì)算結(jié)果值,用于傳出。返回值為0表示成功,其他為錯(cuò)誤碼。

總結(jié)

SHA-256算法由于其強(qiáng)大的安全性,已成為國際標(biāo)準(zhǔn)和許多安全協(xié)議的推薦算法。在密碼存儲(chǔ)、數(shù)字簽名、區(qū)塊鏈技術(shù)、SSL/TLS協(xié)議、數(shù)據(jù)完整性驗(yàn)證、系統(tǒng)安全審計(jì)等眾多應(yīng)用領(lǐng)域,SHA-256算法都扮演著至關(guān)重要的角色,發(fā)揮了巨大的作用。

到此這篇關(guān)于C++如何實(shí)現(xiàn)sha256算法的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)sha256內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++分析如何用虛析構(gòu)與純虛析構(gòu)處理內(nèi)存泄漏

    C++分析如何用虛析構(gòu)與純虛析構(gòu)處理內(nèi)存泄漏

    虛析構(gòu)和純虛析構(gòu)共性:可以解決父類指針釋放子類對(duì)象,都需要有具體的函數(shù)實(shí)現(xiàn);虛析構(gòu)和純虛析構(gòu)區(qū)別:如果是純虛析構(gòu),該類屬于抽象類,無法實(shí)例化對(duì)象
    2022-08-08
  • 使用C語言構(gòu)建基本的二叉樹數(shù)據(jù)結(jié)構(gòu)

    使用C語言構(gòu)建基本的二叉樹數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了使用C語言使用C語言構(gòu)建基本的二叉樹數(shù)據(jù)結(jié)構(gòu),包括根據(jù)前序序列和中序序列構(gòu)建二叉樹的方法,需要的朋友可以參考下
    2015-08-08
  • C語言實(shí)現(xiàn)簡(jiǎn)易三子棋

    C語言實(shí)現(xiàn)簡(jiǎn)易三子棋

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)易三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C/C++后端學(xué)習(xí)與練習(xí)深入

    C/C++后端學(xué)習(xí)與練習(xí)深入

    這篇文章主要介紹了C/C++對(duì)于后端的學(xué)習(xí)與練習(xí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 利用C++實(shí)現(xiàn)?然連接操作算法

    利用C++實(shí)現(xiàn)?然連接操作算法

    這篇文章主要介紹了利用C++實(shí)現(xiàn)?然連接操作算法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • C/C++最短路徑算法之迪杰斯特拉Dijkstra的實(shí)現(xiàn)詳解

    C/C++最短路徑算法之迪杰斯特拉Dijkstra的實(shí)現(xiàn)詳解

    Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。本文將詳解該算法的圖解與實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL

    C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL

    這篇文章主要介紹了C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼

    C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼

    大家好,本篇文章主要講的是C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++之vector容器的的聲明初始化和增刪改查

    C++之vector容器的的聲明初始化和增刪改查

    這篇文章主要給大家介紹了關(guān)于C++vector容器的的聲明初始化和增刪改查的相關(guān)資料,向量(Vector)是一個(gè)封裝了動(dòng)態(tài)大小數(shù)組的順序容器(Sequence Container),跟任意其它類型容器一樣,它能夠存放各種類型的對(duì)象,需要的朋友可以參考下
    2021-07-07
  • 淺析C++中的多態(tài)與文件操作

    淺析C++中的多態(tài)與文件操作

    多態(tài)是面向?qū)ο缶幊蹋∣OP)的核心概念之一,它允許對(duì)象在相同操作下表現(xiàn)出不同的行為,本文主要為大家介紹了C++中多態(tài)與文件操作的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2024-04-04

最新評(píng)論