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編譯會報錯;
相關推薦
linux下md5加密(使用openssl庫C實現)
本文介紹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 Factorization(PAT 甲等 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 Cities(PAT 甲等 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)) 小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裡是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子;如果不是,那麼告