四種加密演算法之SHA1原始碼-C++
SHA1.h檔案:
- //! SHA1 動態連結庫實現 H檔案
- /*!
- @author 朱孟斌
- @e-mail [email protected]
- @version 1.0
- @date 2011-03
- @{
- */
- #ifndef SHA1_H
- #define SHA1_H
- #include "stdint.h"
- //! #定義SHA 中的返回ENUM
- /*!
- @see enum
- */
- #ifndef _SHA_enum_
- #define _SHA_enum_
- enum
- {
-
shaSuccess = 0,
- /*! <空指示參量 */
- shaNull,
- /*! < 輸入資料太長提示 */
- shaInputTooLong,
- /*! <called Input after Result --以輸入結果命名之 */
- shaStateError
- };
- #endif
- //! SHA1HashSize定義的是SHA1雜湊表的大小
- #define SHA1HashSize 20
- //! #能夠進行動態連結庫編譯的SHA1類
- /*!
-
@see class _declspec(dllexport) SHA_1
- 將SHA1演算法寫成動態連結庫的形式方便呼叫,生成訊息使用
- */
- class _declspec(dllexport) SHA_1
- {
- public:
- //! #定義資料結構控制上下文訊息 SHA1Context
- /*!
- 以下這種結構將會控制上下文訊息 for the SHA-1
- hashing operation
- @see struct SHA1Context
- */
- typedefstruct SHA1Context
- {
-
uint32_t Intermediate_Hash[SHA1HashSize/4]; /*! <Message Digest */
- uint32_t Length_Low; /*! <Message length in bits */
- uint32_t Length_High; /*! <Message length in bits */
- /*! <Index into message block array */
- int_least16_t Message_Block_Index;
- uint8_t Message_Block[64]; /*! <512-bit message blocks */
- int Computed; /*! <Is the digest computed? */
- int Corrupted; /*! <Is the message digest corrupted? */
- } SHA1Context;
- public:
- //! #SHA_1 的建構函式
- /*!
- @see SHA_1()
- 其中應該對SHA_1類中的一些變數進行相應的初始化
- */
- SHA_1();
- //! #SHA_1的解構函式
- /*!
- @see ~SHA_1()
- 釋放記憶體
- */
- ~SHA_1(void);
- /*----------------------------------函式原型----------------------------------*/
- //! #SHA1演算法中的資料填充模組
- /*!
- @see void SHA1PadMessage(SHA1Context *);
- @param[SHA1Context* 定義填充資訊指標
- @return[void] 不返回任何值
- */
- void SHA1PadMessage(SHA1Context *); /* 定義填充資訊指標 */
- //! #SHA1的訊息塊描述函式
- /*!
- @see void SHA1ProcessMessageBlock(SHA1Context *);
- @param[SHA1Context* 定義填充資訊指標
- @param[in] 訊息塊長度為固定之512位元
- @return[void] 不返回任何值
- */
- void SHA1ProcessMessageBlock(SHA1Context *);
- //! #SHA1的資料初始化操作函式
- /*!
- @see int SHA1Reset( SHA1Context *);
- @param[SHA1Context* 定義填充資訊指標
- @return[int] 成功返回shaNull,失敗返回shaSuccess
- @see SHA1 enum
- */
- int SHA1Reset( SHA1Context *);
- //! #SHA1的輸入描述函式
- /*!
- @see int SHA1Input( SHA1Context *, const uint8_t *, unsigned int);
- @param[SHA1Context* 定義填充資訊指標
- @param[uint8_t 接收單位長度為8位元組倍數的訊息
- @return[enum] 成功返回shaNull,失敗返回shaSuccess,錯誤返回shaStateError
- @see SHA1 enum
- */
- int SHA1Input( SHA1Context *, const uint8_t *, unsigned int);
- //! #SHA1的結果描述函式
- /*!
- @see int SHA1Result( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]);
- @param[SHA1Context* 定義填充資訊指標
- @param[uint8_t 160位元的訊息摘要佇列
- @attention 返回一個160位元的訊息摘要佇列
- @return[enum] 成功返回shaNull,失敗返回shaSuccess,錯誤返回shaStateError
- @see SHA1 enum
- */
- int SHA1Result( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]);
- private:
- };
- #endif // SHA1_H
SHA1.cpp檔案:
- //! SHA1 動態連結庫實現 CPP檔案
- /*!
- @author 朱孟斌
- @e-mail [email protected]
- @version 1.0
- @date 2011-03
- @{
-
相關推薦
四種加密演算法之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是一種更高階的驗證方式。一般用於數字