1. 程式人生 > >linux下md5加密(使用openssl庫C實現)

linux下md5加密(使用openssl庫C實現)

本文介紹linux c使用openssl/md5.h加密,有兩種實現方法。


方法一:

#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>

int main( int argc, char **argv )
{
    MD5_CTX ctx;
    unsigned char *data="123";
    unsigned char md[16];
    char buf[33]={'/0'};
    char tmp[3]={'/0'};
    int i;

    MD5_Init(&ctx);
    MD5_Update(&ctx,data,strlen(data));
    MD5_Final(md,&ctx);

    for( i=0; i<16; i++ ){
        sprintf(tmp,"%02X",md[i]);
        strcat(buf,tmp);
    }
    printf("%s/n",buf);
    return 0;
}
輸出:
202CB962AC59075B964B07152D234B70

方法二:
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>

int main( int argc, char **argv )
{
    unsigned char *data = "123";
    unsigned char md[16];
    int i;
    char tmp[3]={'/0'},buf[33]={'/0'};
    MD5(data,strlen(data),md);
    for (i = 0; i < 16; i++){
        sprintf(tmp,"%2.2x",md[i]);
        strcat(buf,tmp);
    }
    printf("%s/n",buf);
    return 0;
}

輸出:
202cb962ac59075b964b07152d234b70

總結:
兩種實現方式,一樣的結果。相比較,第二種方法更直觀簡單些。
遇到的問題:
1.sprintf時的格式,%02X和%2.2格式是一樣的,強制輸出兩位,比如十進位制的8,十六進位制也是8,這個格式是控制輸出兩位,08。如果加密結果要小寫字母顯示,就是"%2.2x",大寫就是"2.2X"。
2.一定要使用unsigned char,雖然是char,其實就是個int,當然,它只有一個位元組,和char的區別是,unsigned char 0~255 ,char -127~127。使用char會出問題。這個md5加密函式,返回16個十進位制數,範圍在0~255間,把它format為十六進位制就是32為md5編碼了。
3.gcc編譯的時候,後面加上引數 -lcrypto 如果系統沒有安裝libcrypto,是不能用這個方法的。

嵌入式debian下編譯情況:

1. 需要將char tmp[3]={'/0'}, buf[33]={'/0'}; 更改為char tmp[3]={}, buf[33]={}; 否則gcc編譯會報錯; 

相關推薦

linuxmd5加密使用opensslC實現

本文介紹linux c使用openssl/md5.h加密,有兩種實現方法。 方法一: #include<stdio.h> #include<openssl/md5.h> #include<string.h> int main( in

MD5加密java和c#

service int print cnblogs return pan Coding pro pre java代碼 public static String md5(String str) { try { MessageDiges

C#】MD5加密Message-Digest Algorithm 5

引言     MD5為電腦保安領域廣泛使用的一種雜湊函式,用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一。將資料(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理 MD5演算法的特點

linux搭建rocketmq附服務腳本

linux mq rocketmq rocketmq腳本 此文檔安裝的是rocketmq當前最新版本rocketmq v4.0.0,當時阿裏已經把rocketmq捐贈給了apache組織,為什麽要特別指明這一點,因為在下載、安裝和服務腳本中有個別不同的地方。這是本人第一篇博客,如果排版不是很清

Linux cd命令彩38平臺搭建

表示法 表示 linux 環境變量 使用 命令 主目錄 指向 搭建 cd命令用來切換工作目錄至dirname。 其中dirName表示法可為絕對路徑或相對路徑。(彩38平臺搭建)企 娥:217 1793 408語法:cd (選項)參數 選項: -p 如果要切換到的目標目錄是

Linux批量部署Pxe、Kickstart實現及應用

導讀: 作為運維經常會遇到一些重複的工作,例如:有時公司同時上線幾十甚至上百臺伺服器,而且需要我們在 短時間內完成系統安裝。本文主要講述了Linux下批量部署 Pxe、Kickstart實現及應用. 一、相關知識提要 1.理論知識 PXE : PXE(pre

Linux socket超時connect超時/recv超時

2008-09-21 11:34 19733人閱讀 評論(1) 收藏 舉報  connect超時: 目前各平臺通用的設定socket connect超時的辦法是通過select(),具體方法如下: 1.建立socket; 2.將該socket設定為非阻塞模式; 3

[轉]opencv3 圖像處理 之 圖像縮放 python與c++實現

space original 註意 libs 波紋 輸出 uil iostream 3.5 轉自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函數介紹 1) 圖像大小變換 cvResize () 原型: void

軟體測試第三次作業WordCount的C#實現

wordCount的c#實現 合作者:201631092112      ,    201631092126 碼雲(gitee)地址:https://gitee.com/ulysses497/wordCount 本次作業地址:https://edu.cn

Leetcode 929 獨特的電子郵件Python和C++實現

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。 例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。 除了小寫字母,這些電子郵件還可能包含 ','

1103 Integer FactorizationPAT 甲等 C++實現

1103 Integer Factorization (30 point(s)) The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K po

1013 Battle Over CitiesPAT 甲等 C++實現

1013 Battle Over Cities (25 point(s)) It is vitally important to have all the cities connected by highways in a war. If a city is occupie

Leetcode 929 獨特的電子郵件Python和C++實現

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。 例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。 除了小寫字母,這些電子郵件還可能包含 ',' 或 '+'。 如果在電子郵件地址的本

1065 單身狗PAT 乙級 C++實現

“單身狗”是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。輸入格式:輸入第一行給出一個正整數N(<=50000),是已知夫妻/伴侶的對數;隨後N行,每行給出一對夫妻/伴侶——為方便起見,每人對應一個ID號,為5位數字(從000

演算法之堆排序最大堆c++實現

堆是完全二叉樹的結構,因此對於一個有n個節點的堆,高度為O(logn)。 最大堆:堆中的最大元素存放在根節點的位置。 除了根節點,其他每個節點的值最多與其父節點的值一樣大。也就是任意一個子樹中包含的所有節點的值都不大於樹根節點的值。 堆中節點的位置編號都是確定的,根節點編號

1071 小賭怡情PAT 乙級 C++實現

常言道“小賭怡情”。這是一個很簡單的小遊戲:首先由計算機給出第一個整數;然後玩家下注賭第二個整數將會比第一個數大還是小;玩家下注 t 個籌碼後,計算機給出第二個數。若玩家猜對了,則系統獎勵玩家 t 個籌碼;否則扣除玩家 t 個籌碼。注意:玩家下注的籌碼數不能超過自己帳戶上擁有的籌碼數。當玩家輸光了全部籌碼後,

C++ Windows程式設計實現貪吃蛇可用Dev C++實現

最近學習Windows程式設計,試著自己做了個簡單的貪吃蛇遊戲。不到300行程式碼,把Windows訊息機制,繪製方法,多執行緒等知識都用上了,適合初學者入門。效果圖如下:完整程式碼附註釋:#include <windows.h> #include <std

1074 宇宙無敵加法器PAT 乙級 C++實現

1074 宇宙無敵加法器(20 point(s))  地球人習慣使用十進位制數,並且預設一個數字的每一位都是十進位制的。而在 PAT 星人開掛的世界裡,每個數字的每一位都是不同進位制的,這種神奇的數字稱為“PAT數”。每個 PAT 星人都必須熟記各位數字的進製表,例如“……

1020 月餅PAT 乙級 C++實現

月餅是中國人在中秋佳節時吃的一種傳統食品,不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算可以獲得的最大收益是多少。注意:銷售時允許取出一部分庫存。樣例給出的情形是這樣的:假如我們有3種月餅,其庫存量分別為18、15、10萬噸,

1039 到底買不買PAT 乙級 C++實現

1039 到底買不買(20)(20 point(s)) 小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裡是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子;如果不是,那麼告