1 、 Java 版
حزمة com.lyz.utils.common ؛ استيراد java.io.unsupportedencodingException ؛ استيراد java.security.messagedigest ؛ استيراد java.security.nosuchalgorithmexception ؛ / ** * MD5 加密 * Author liuyazhuang */ public class md5hash {public static string md5java (string message) {String digest = null ؛ حاول {messagedigest md = messagedigest.getInstance ("MD5") ؛ byte [] hash = md.digest (message.getBytes ("utf-8")) ؛ . لـ (byte b: hash) {sb.append (string.format ("٪ 02x" ، b & 0xff)) ؛ } digest = sb.toString () ؛ } catch (UnsupportedEncodingException ex) {//logger.getLogger(StringReplace.class.getName() .LOG(LEVEL.Severe ، null ، ex) ؛ } catch (nosuchalgorithMexception ex) {//logger.getLogger(StringReplace.class.getName().LOG(LEVEL.Severe ، null ، ex) ؛ } إرجاع Digest ؛ } public static void main (string [] args) {system.out.println (md5java ("admin"). touppercase ()) ؛ }}2 、 C ++ 代码
(1) MD5.H
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> void md5digest (char *pszinput ، ninputsize unsigned ، char *pszoutput) ؛
(2) MD5.CPP
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include "md5.h" typedef char *pointer ؛ typedef غير موقعة int uint2 ؛ typedef غير موقعة int uint4 ؛ typedef struct {uint4 state [4] ؛ عدد UINT4 [2] ؛ مخزن المؤقت Char غير موقعة [64] ؛ } md5_ctx ؛ void md5init (md5_ctx *) ؛ void md5update (md5_ctx *، char غير موقعة *، int غير موقعة) ؛ void md5final (char غير موقعة [16] ، md5_ctx *) ؛ #define S11 7 #Define S12 12 #Define S13 17 #Define S14 22 #Define S21 5 #Define S22 9 #Define S23 15 #Define S44 21 static char char padding [64] = {0x80 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ؛ #define f (x ، y ، z) (((x) & (y)) | ((~ x) & (z))) #define g (x ، y ، z) (((x) & (z))) (~ z))) #define rotate_left (x ، n) (((x) << (n)) | ((x) >> (32- (n)))) (A) = ROTATE_LEFT ((A) ، (S)) ؛ (أ) += (ب) ؛ } #define gg (a ، b ، c ، d ، x ، s ، ac) {(a) + = g ((b) ، (c) ، (d)) + (x) + (uint4) (ac) ؛ (A) = ROTATE_LEFT ((A) ، (S)) ؛ (أ) += (ب) ؛ } #define hh (a ، b ، c ، d ، x ، s ، ac) {(a) + = h ((b) ، (c) ، (d)) + (x) + (uint4) (ac) ؛ (A) = ROTATE_LEFT ((A) ، (S)) ؛ (أ) += (ب) ؛ } #define II (a ، b ، c ، d ، x ، s ، ac) {(a) + = i ((b) ، (c) ، (d)) + (x) + (uint4) (ac) ؛ (A) = ROTATE_LEFT ((A) ، (S)) ؛ (أ) += (ب) ؛ } Enline void Encode (char char *غير موقعة ، uint4 *input ، int int len) {unsigned int i ، j ؛ لـ (i = 0 ، j = 0 ؛ j <len ؛ i ++ ، j+= 4) {output [j] = (char unsigned) (input [i] & 0xff) ؛ الإخراج [j+1] = (char غير موقعة) ((إدخال [i] >> 8) & 0xff) ؛ الإخراج [j+2] = (char غير موقعة) ((إدخال [i] >> 16) & 0xff) ؛ الإخراج [j+3] = (char غير موقعة) ((إدخال [i] >> 24) & 0xff) ؛ }} decode void inline (uint4 *الإخراج ، char char *غير موقعة ، int int len) {unsigned int i ، j ؛ لـ (i = 0 ، j = 0 ؛ j <len ؛ i ++ ، j+= 4) الإخراج [i] = ((uint4) إدخال [j]) | (((UINT4) إدخال [J+1]) << 8) | (((UINT4) إدخال [J+2]) << 16) | (((UINT4) إدخال [j+3]) << 24) ؛ } void void md5transform (uint4 state [4] ، كتلة char غير موقعة [64]) {uint4 a = state [0] ، b = state [1] ، c = state [2] ، d = state [3] ، x [16] ؛ Decode (x ، block ، 64) ؛ FF (A ، B ، C ، D ، X [0] ، S11 ، 0xD76AA478) ؛ FF (D ، A ، B ، C ، X [1] ، S12 ، 0xE8C7B756) ؛ FF (C ، D ، A ، B ، X [2] ، S13 ، 0x242070DB) ؛ FF (B ، C ، D ، A ، X [3] ، S14 ، 0XC1BDCEEE) ؛ FF (A ، B ، C ، D ، X [4] ، S11 ، 0xF57C0FAF) ؛ FF (D ، A ، B ، C ، X [5] ، S12 ، 0x4787C62A) ؛ FF (C ، D ، A ، B ، X [6] ، S13 ، 0xA8304613) ؛ FF (B ، C ، D ، A ، X [7] ، S14 ، 0XFD469501) ؛ FF (A ، B ، C ، D ، X [8] ، S11 ، 0x698098D8) ؛ FF (D ، A ، B ، C ، X [9] ، S12 ، 0x8B44F7AF) ؛ FF (C ، D ، A ، B ، X [10] ، S13 ، 0xffff5bb1) ؛ FF (B ، C ، D ، A ، X [11] ، S14 ، 0x895CD7BE) ؛ FF (A ، B ، C ، D ، X [12] ، S11 ، 0x6B901122) ؛ FF (D ، A ، B ، C ، X [13] ، S12 ، 0xFD987193) ؛ FF (C ، D ، A ، B ، X [14] ، S13 ، 0XA679438E) ؛ FF (B ، C ، D ، A ، X [15] ، S14 ، 0x49B40821) ؛ GG (A ، B ، C ، D ، X [1] ، S21 ، 0xF61E2562) ؛ GG (D ، A ، B ، C ، X [6] ، S22 ، 0xC040B340) ؛ GG (C ، D ، A ، B ، X [11] ، S23 ، 0x265E5A51) ؛ GG (B ، C ، D ، A ، X [0] ، S24 ، 0xE9B6C7AA) ؛ GG (A ، B ، C ، D ، X [5] ، S21 ، 0xD62F105D) ؛ GG (D ، A ، B ، C ، X [10] ، S22 ، 0x2441453) ؛ GG (C ، D ، A ، B ، X [15] ، S23 ، 0xD8A1E681) ؛ GG (B ، C ، D ، A ، X [4] ، S24 ، 0xE7D3FBC8) ؛ GG (A ، B ، C ، D ، X [9] ، S21 ، 0x21e1cde6) ؛ GG (D ، A ، B ، C ، X [14] ، S22 ، 0xC33707D6) ؛ GG (C ، D ، A ، B ، X [3] ، S23 ، 0XF4D50D87) ؛ GG (B ، C ، D ، A ، X [8] ، S24 ، 0x455a14ed) ؛ GG (A ، B ، C ، D ، X [13] ، S21 ، 0xa9e3e905) ؛ GG (D ، A ، B ، C ، X [2] ، S22 ، 0xfcefa3f8) ؛ GG (C ، D ، A ، B ، X [7] ، S23 ، 0x676F02D9) ؛ GG (B ، C ، D ، A ، X [12] ، S24 ، 0x8d2a4c8a) ؛ HH (A ، B ، C ، D ، X [5] ، S31 ، 0xFFFA3942) ؛ HH (D ، A ، B ، C ، X [8] ، S32 ، 0x8771F681) ؛ HH (C ، D ، A ، B ، X [11] ، S33 ، 0x6D9D6122) ؛ HH (B ، C ، D ، A ، X [14] ، S34 ، 0xFDE5380C) ؛ HH (A ، B ، C ، D ، X [1] ، S31 ، 0xa4Bebeea44) ؛ HH (D ، A ، B ، C ، X [4] ، S32 ، 0x4bdecfa9) ؛ HH (C ، D ، A ، B ، X [7] ، S33 ، 0XF6BB4B60) ؛ HH (B ، C ، D ، A ، X [10] ، S34 ، 0xbebfbc70) ؛ HH (A ، B ، C ، D ، X [13] ، S31 ، 0x289B7EC6) ؛ HH (D ، A ، B ، C ، X [0] ، S32 ، 0xeaa127fa) ؛ HH (C ، D ، A ، B ، X [3] ، S33 ، 0xD4EF3085) ؛ HH (B ، C ، D ، A ، X [6] ، S34 ، 0x4881D05) ؛ HH (A ، B ، C ، D ، X [9] ، S31 ، 0xD9D4D039) ؛ HH (D ، A ، B ، C ، X [12] ، S32 ، 0xE6DB99E5) ؛ HH (C ، D ، A ، B ، X [15] ، S33 ، 0x1FA27CF8) ؛ HH (B ، C ، D ، A ، X [2] ، S34 ، 0xC4AC5665) ؛ II (A ، B ، C ، D ، X [0] ، S41 ، 0xF4292244) ؛ II (D ، A ، B ، C ، X [7] ، S42 ، 0x432AFF97) ؛ II (C ، D ، A ، B ، X [14] ، S43 ، 0xab9423a7) ؛ II (B ، C ، D ، A ، X [5] ، S44 ، 0xFC93A039) ؛ II (A ، B ، C ، D ، X [12] ، S41 ، 0x655B59C3) ؛ II (D ، A ، B ، C ، X [3] ، S42 ، 0x8F0CC92) ؛ II (C ، D ، A ، B ، X [10] ، S43 ، 0xffeff47d) ؛ II (B ، C ، D ، A ، X [1] ، S44 ، 0x85845DD1) ؛ II (A ، B ، C ، D ، X [8] ، S41 ، 0x6FA87E4F) ؛ II (D ، A ، B ، C ، X [15] ، S42 ، 0xfe2ce6e0) ؛ II (C ، D ، A ، B ، X [6] ، S43 ، 0xA3014314) ؛ II (B ، C ، D ، A ، X [13] ، S44 ، 0x4E0811A1) ؛ II (A ، B ، C ، D ، X [4] ، S41 ، 0xF7537E82) ؛ II (D ، A ، B ، C ، X [11] ، S42 ، 0xBD3AF235) ؛ II (C ، D ، A ، B ، X [2] ، S43 ، 0x2AD7D2BB) ؛ II (B ، C ، D ، A ، X [9] ، S44 ، 0xEB86D391) ؛ الحالة [0] += a ؛ الحالة [1] += ب ؛ الحالة [2] += ج ؛ الحالة [3] += D ؛ memset ((pointer) x ، 0 ، sizeof (x)) ؛ } inline void md5init (md5_ctx *context) {context-> count [0] = context-> count [1] = 0 ؛ سياق-> الحالة [0] = 0x67452301 ؛ Context-> State [1] = 0xefcdab89 ؛ السياق-> الحالة [2] = 0x98BADCFE ؛ السياق-> الحالة [3] = 0x10325476 ؛ } void void md5update (md5_ctx *context ، char char *غير موقّع ، int inpectlen غير موقعة) {unsigned int i ، index ، partlen ؛ index = (int غير موقعة) ((السياق-> العد [0] >> 3) و 0x3F) ؛ if ((context-> count [0]+= ((uint4) inputlen << 3)) <((uint4) inputlen << 3)) context-> count [1] ++ ؛ Context-> count [1] += ((uint4) inputlen >> 29) ؛ partlen = 64 - فهرس ؛ if (inputlen> = partlen) {memcpy ((pointer) & context-> buffer [index] ، (pointer) input ، partlen) ؛ md5transform (Context-> State ، Context-> Buffer) ؛ لـ (i = partlen ؛ i + 63 <inputlen ؛ i + = 64) md5transform (context-> state ، & input [i]) ؛ الفهرس = 0 ؛ } آخر i = 0 ؛ memcpy ((pointer) & context-> buffer [index] ، (pointer) & input [i] ، inputlen-i) ؛ } inline void md5final (غير موقّع char digest [16] ، md5_ctx *context) {غير موقّع bits [8] ؛ مؤشر int غير موقعة ، بادين ؛ الترميز (بت ، السياق-> العد ، 8) ؛ index = (int غير موقعة) ((السياق-> العد [0] >> 3) و 0x3F) ؛ PADLEN = (الفهرس <56)؟ (56 - فهرس): (120 - فهرس) ؛ md5update (السياق ، الحشو ، بادين) ؛ md5update (السياق ، بت ، 8) ؛ encode (Digest ، Context-> state ، 16) ؛ سياق memset ((مؤشر) ، 0 ، حجم (*سياق)) ؛ } void md5digest (char *pszinput ، ninputsize long ninputsize ، char *pszoutput) {md5_ctx context ؛ غير موقعة int len = strlen (pszinput) ؛ md5init (& context) ؛ md5update (& context ، (char char *) pszinput ، len) ؛ md5final ((char char *) pszoutput ، & context) ؛ } main () {char szdigest [16] ؛ char encrypt [200] ؛ printf ("请输入要计算 md5 值的字符串:") ؛ يحصل (تشفير) ؛ printf ("/n 加密结果:") ؛ MD5Digest (Encrypt ، Strlen (Encrypt) ، szDigest) ؛ int أنا ؛ لـ (i = 0 ؛ i <16 ؛ i ++) printf ("٪ 02x" ، (char غير موقعة) szdigest [i]) ؛ getchar () ؛}3 、运行效果
这里我们都以输入 123456 为例
(1) جافا :
(2) C ++ 输出结果如下 :
以上就是小编为大家带来的 java 与 c ++ 实现相同的 md5 加密算法简单实例的全部内容了 , 希望对大家有所帮助 , 多多支持武林网 ~