1. 程式人生 > >四種加密演算法之SHA1原始碼-C++

四種加密演算法之SHA1原始碼-C++

SHA1.h檔案:

  1. //! SHA1 動態連結庫實現   H檔案
  2. /*! 
  3.  @author 朱孟斌 
  4.  @e-mail  [email protected] 
  5.  @version 1.0 
  6.  @date 2011-03 
  7.  @{ 
  8. */
  9. #ifndef SHA1_H
  10. #define SHA1_H
  11. #include "stdint.h"
  12. //! #定義SHA 中的返回ENUM
  13. /*! 
  14.    @see enum 
  15. */
  16. #ifndef _SHA_enum_
  17. #define _SHA_enum_
  18. enum
  19. {  
  20.     shaSuccess = 0,  
  21.     /*! <空指示參量 */
  22.     shaNull,              
  23.     /*! < 輸入資料太長提示 */
  24.     shaInputTooLong,  
  25.      /*! <called Input after Result --以輸入結果命名之 */
  26.     shaStateError        
  27. };  
  28. #endif
  29. //! SHA1HashSize定義的是SHA1雜湊表的大小
  30. #define SHA1HashSize 20
  31. //!   #能夠進行動態連結庫編譯的SHA1類
  32.  /*!   
  33.        @see class _declspec(dllexport) SHA_1
     
  34.        將SHA1演算法寫成動態連結庫的形式方便呼叫,生成訊息使用 
  35.  */
  36. class _declspec(dllexport) SHA_1  
  37. {  
  38. public:  
  39.     //! #定義資料結構控制上下文訊息 SHA1Context
  40.     /*! 
  41.         以下這種結構將會控制上下文訊息 for the SHA-1 
  42.         hashing operation 
  43.         @see struct SHA1Context 
  44.     */
  45.     typedefstruct SHA1Context  
  46.     {  
  47.         uint32_t Intermediate_Hash[SHA1HashSize/4]; /*! <Message Digest  */
  48.         uint32_t Length_Low;            /*! <Message length in bits      */
  49.         uint32_t Length_High;           /*! <Message length in bits      */
  50.         /*! <Index into message block array   */
  51.         int_least16_t Message_Block_Index;  
  52.         uint8_t Message_Block[64];      /*! <512-bit message blocks      */
  53.         int Computed;               /*! <Is the digest computed?         */
  54.         int Corrupted;             /*! <Is the message digest corrupted? */
  55.     } SHA1Context;  
  56. public:  
  57.     //! #SHA_1 的建構函式
  58.     /*! 
  59.      @see SHA_1() 
  60.       其中應該對SHA_1類中的一些變數進行相應的初始化 
  61.     */
  62.     SHA_1();  
  63.     //! #SHA_1的解構函式
  64.     /*! 
  65.     @see ~SHA_1() 
  66.       釋放記憶體 
  67.     */
  68.     ~SHA_1(void);  
  69.     /*----------------------------------函式原型----------------------------------*/
  70.     //! #SHA1演算法中的資料填充模組
  71.     /*! 
  72.       @see void SHA1PadMessage(SHA1Context *); 
  73.       @param[SHA1Context*  定義填充資訊指標 
  74.       @return[void] 不返回任何值 
  75.     */
  76.     void SHA1PadMessage(SHA1Context *);    /*  定義填充資訊指標  */
  77.     //! #SHA1的訊息塊描述函式
  78.     /*! 
  79.       @see void SHA1ProcessMessageBlock(SHA1Context *); 
  80.       @param[SHA1Context*  定義填充資訊指標 
  81.       @param[in] 訊息塊長度為固定之512位元 
  82.       @return[void] 不返回任何值 
  83.     */
  84.     void SHA1ProcessMessageBlock(SHA1Context *);  
  85.     //! #SHA1的資料初始化操作函式
  86.     /*! 
  87.       @see int SHA1Reset(  SHA1Context *); 
  88.       @param[SHA1Context*  定義填充資訊指標 
  89.       @return[int] 成功返回shaNull,失敗返回shaSuccess 
  90.       @see SHA1 enum 
  91.     */
  92.     int SHA1Reset(  SHA1Context *);  
  93.     //! #SHA1的輸入描述函式
  94.     /*! 
  95.       @see int SHA1Input(  SHA1Context *, const uint8_t *, unsigned int); 
  96.       @param[SHA1Context*  定義填充資訊指標 
  97.       @param[uint8_t 接收單位長度為8位元組倍數的訊息 
  98.       @return[enum] 成功返回shaNull,失敗返回shaSuccess,錯誤返回shaStateError 
  99.       @see SHA1 enum 
  100.     */
  101.     int SHA1Input(  SHA1Context *, const uint8_t *, unsigned int);  
  102.     //! #SHA1的結果描述函式
  103.     /*! 
  104.       @see int SHA1Result( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]); 
  105.       @param[SHA1Context*  定義填充資訊指標 
  106.       @param[uint8_t 160位元的訊息摘要佇列 
  107.       @attention 返回一個160位元的訊息摘要佇列 
  108.       @return[enum] 成功返回shaNull,失敗返回shaSuccess,錯誤返回shaStateError 
  109.       @see SHA1 enum 
  110.     */
  111.     int SHA1Result( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]);  
  112. private:  
  113. };  
  114. #endif // SHA1_H

SHA1.cpp檔案:
  1. //! SHA1 動態連結庫實現   CPP檔案
  2. /*! 
  3.  @author 朱孟斌 
  4.  @e-mail  [email protected] 
  5.  @version 1.0 
  6.  @date 2011-03 
  7.  @{ 
  8. 相關推薦

    加密演算法SHA1原始碼-C++

    SHA1.h檔案: //! SHA1 動態連結庫實現   H檔案 /*!   @author 朱孟斌   @e-mail  [email protected]   @version 1.0   @date 2011-03 

    加密演算法C#相容PHP中MD5加密

    C#常用的MD5加密演算法: public static string MD5(string password) { byte[] textBytes = System.Text.Encoding.Default.GetBytes(password); try

    )NDK開發 java 與C/C++ 程式碼互相呼叫

    java 呼叫c/c++ 的方法,很簡單。我們勾選建立支援C/C++ 專案的時候,就已經生成了一個Demo 下面主要介紹,C/C++ 呼叫 java 的方法。   一、訪問 java 成員非靜態成員變數: JNI 呼叫java非靜態變數的 方法名格式 : Ge

    Java最常用的幾加密演算法

    1. BASE64 Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,大家可以檢視RFC2045~RFC2049,上面有MIME的詳細規範。Base64編碼可用於在HTTP環境下傳遞較長的標識資訊。例如,在Java Persistence系統Hibernate中,就採用了B

    BASE64、MD5、SHA、HMAC幾加密演算法(轉)

    本篇內容簡要介紹BASE64、MD5、SHA、HMAC幾種加密演算法。     BASE64編碼演算法不算是真正的加密演算法。     MD5、SHA、HMAC這三種加密演算法,可謂是非可逆加密,就是不可解密的加密方法,我們稱之為單向加密演

    分組加密加密模式(ECB、CBC、CFB、OFB)

    加密一般分為對稱加密和非對稱加密。對稱加密又分為分組加密和序列密碼。分組密碼,也叫塊加密(block cyphers),一次加密明文中的一個塊。是將明文按一定的位長分組,明文組經過加密運算得到密文組,密文組經過解密運算(加密運算的逆運算),還原成明文組。序列密碼,也叫流加密(stream cyphe

    php基礎演算法:冒泡,選擇,插入和快速排序法 程式碼練習

    function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])

    最全加密演算法對稱加密和非對稱加密

    常見加密演算法 : DES(Data Encryption Standard):資料加密標準,速度較快,適用於加密大量資料的場合;  3DES(Triple DES):是基於DES,對一塊資料用三個不同的金鑰進行三次加密,強度更高; RC2和 RC4:用變長金鑰對大量資

    歸併,快速,希爾,普通插入排序演算法的比較

    import java.util.Arrays; public class ShellSort { public static void main(String[] args) { int[] arr = new int[10000]

    密碼學摘要演算法SHA1

    密碼學摘要演算法之SHA1 SHA介紹 思想 處理過程 與MD5的區別 SHA介紹 SHA演算法,即安全雜湊演算法(Secure Hash Algorithm)是一種與MD5同源的資料加密演算法,該演算法經過加密專家多年來的發展和

    資料結構與演算法順序表C語言實現

    順序表等相關概念請自行查閱資料,這裡主要是實現。 注: 1.順序表C語言實現; 2.按較簡單的方式實現,主要幫助理解,可在此基礎上修改,更加完善; 3.提供幾個簡單函式,可自行新增功能; 4.可用C++封裝,得知STL中vector原理。    順序表容量。 #def

    淺談常見的七加密演算法及實現(附程式碼)

    1. 前言 數字簽名、資訊加密 是前後端開發都經常需要使用到的技術,應用場景包括了使用者登入、交易、資訊通訊、oauth 等等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的 簽名加密演算法來達到業務目標。這裡簡單的給大家介紹幾種常見的簽

    黑馬程式設計師____排序演算法的比較分析

    下面將詳細介紹隨機數的生成以及四種排序演算法的設計技巧。1)隨機數生成 由於題目要求生成[0,2……32−1]之間的隨機數,而c標準庫中的隨機數函式rand()只能生成[0,32767]之間的隨機數,因此採用拼接的方法來生成32位的隨機數。 將32位的數分成三段,即2位,15位,15位三段。後面兩段可以直接用

    排序演算法歸併排序 ( C語言版 )

    歸併排序 :(Merge Sort)是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,

    8經典演算法氣泡排序

    氣泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交

    Java從入門到放棄(十)集合框架TreeMap原始碼

    我們經常需要對一些集合按照指定的規則進行排序,比如學生按照學號排序,或者按照成績排序,集合裡面有專門排序的集合,如TreeMap。TreeMap裡面是使用的紅黑樹結構。 構造方法 private final Comparator<? su

    常見的幾加密演算法解析

    1. 安全的目標 私密性(confidentiality):將資料加密,他人截獲後無法解密; 完整性(integrity):報文沒有被篡改過(分為資料完成性和系統完整性); 可用性(availability): 源認證(不可否認性):對發起者的身份進行認證; 2. 加密演算法簡述

    Android加密演算法對稱加密AES

            作為一名developer,一些重要檔案存取,網路資料傳輸安全不可忽視,促使我們使用加密演算法手段保證資訊資料的安全。加密並不意味著絕對的安全,總有破解的時候,為了提高破解難度,在演算法要求和品位上也越來越高,常見的有SHA-256、MD5等的Hash

    Java資料結構:基本演算法(窮舉演算法,遞推演算法,分治演算法,概論演算法

    1,窮舉演算法 主要解決雞兔同籠類似問題 public class 窮舉演算法 { public static void main(String[] args) { int head = 35; int foot = 94; int j = 0; i

    常見的加密演算法DSA 演算法

    DSA(Digital Signature Algorithm)是Schnorr和ElGamal簽名演算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。 DSA是基於整數有限域離散對數難題的。DSA是一種更高階的驗證方式。一般用於數字