1 、 Java 版
Paket com.lyz.utils.common; importieren java.io.unsupportedenCodingException; Java.Security.Messagedigest importieren; Java.security.NoSuchalgorithmException; / ** * md5 加密 * @author liuyazhuang */ public class Md5Hash {public static String md5java (String -Nachricht) {String digest = null; try {MessagedIGest md = MessagedIGest.getInstance ("md5"); byte [] Hash = md.Digest (message.getBytes ("utf-8")); // Byte -Array in hexadezimale String -StringBuilder -SB = New StringBuilder (2 * Hash.length) konvertieren; für (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); } return 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, nicht signiertes langes ninputsize, char *pszoutput);
(2) Md5.Cpp
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include "md5.h" typedef unsigned char *pointer; typedef nicht signiert kurz int uint2; typedef unsigned long int uint4; typedef struct {uint4 state [4]; Uint4 count [2]; vorzeichenloser Zeichenpuffer [64]; } Md5_ctx; void Md5Init (md5_ctx *); void Md5Update (Md5_CTX *, nicht signiertes char *, unsigned int); void md5final (nicht signiertes char [16], md5_ctx *); #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 static unsigned 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, 0}; #Define f (x, y, z) (((x) & (y)) | ((~ x) & (z)) #define g (x, y, z) ((x) & (z) | ((y) & (~ z)) #define H (x, y) (y) ^ (y) | . (a) = rotate_left ((a), (s)); (a) += (b); } #define gg (a, b, c, d, x, s, ac) {(a) + = g ((b), (c), (d)) + (x) + (uint4) (ac); (a) = rotate_left ((a), (s)); (a) += (b); } #define hh (a, b, c, d, x, s, ac) {(a) + = h ((b), (c), (d)) + (x) + (uint4) (ac); (a) = rotate_left ((a), (s)); (a) += (b); } #define ii (a, b, c, d, x, s, ac) {(a) + = i ((b), (c), (d)) + (x) + (uint4) (ac); (a) = rotate_left ((a), (s)); (a) += (b); } inline void codes (unsigned char *output, uint4 *Eingabe, unsigned int len) {vorzeichenloses int i, j; für (i = 0, j = 0; j <len; i ++, j+= 4) {output [j] = (unsigned char) (Eingabe [i] & 0xff); Ausgabe [j+1] = (vorzeichenloses Zeichen) ((Eingabe [i] >> 8) & 0xff); Ausgabe [j+2] = (nicht signiertes Zeichen) ((Eingabe [i] >> 16) & 0xff); Ausgabe [j+3] = (nicht signiertes Zeichen) ((Eingabe [i] >> 24) & 0xff); }} inline void decode (uint4 *output, unsigned char *Eingabe, unsigned int len) {vorzeichenloses int i, j; für (i = 0, j = 0; j <len; i ++, j+= 4) Ausgabe [i] = ((uint4) Eingabe [j]) | (((Uint4) Eingabe [j+1]) << 8) | (((Uint4) Eingabe [j+2]) << 16) | (((Uint4) Eingabe [j+3]) << 24); } inline void md5transform (uint4 -Zustand [4], vorzeichenloser Zeichen [64]) {Uint4 a = Zustand [0], b = Zustand [1], c = Zustand [2], d = Zustand [3], x [16]; Decodieren (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, 0xa4Beea44); 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, 0x8f0ccc92); 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); Zustand [0] += a; Zustand [1] += b; Zustand [2] += C; Zustand [3] += D; memset ((Zeiger) x, 0, sizeof (x)); } inline void md5init (Md5_ctx *Kontext) {context-> count [0] = context-> count [1] = 0; Kontext-> Zustand [0] = 0x67452301; Kontext-> Zustand [1] = 0xefcDab89; Kontext-> Zustand [2] = 0x98Badcfe; Kontext-> Zustand [3] = 0x10325476; } inline void Md5Update (MD5_CTX *-Kontext, nicht signiertes char *Eingang, vorzeichenloses Inputlen) {vorzeichenloses int i, index, partlen; Index = (nicht signiert int) ((context-> count [0] >> 3) & 0x3f); if ((context-> count [0]+= ((uint4) inputlen << 3)) <((uint4) Eingabe << 3)) Kontext-> count [1] ++; Kontext-> count [1] += ((uint4) InputLen >> 29); partlen = 64 - Index; if (inputlen> = partlen) {memcpy ((Zeiger) & context-> buffer [index], (zeiger) Eingabe, partlen); Md5Transform (Kontext-> Zustand, Kontext-> Puffer); für (i = partlen; i + 63 <inputlen; i + = 64) md5transform (Kontext-> Zustand, & Eingabe [i]); Index = 0; } else i = 0; memcpy ((Zeiger) & Kontext-> Buffer [Index], (Zeiger) & Eingabe [i], Inputlen-i); } inline void md5final (unsigned char digest [16], md5_ctx *context) {unsigned char bit [8]; unsigned Int Index, Padlen; Codieren (bit, context-> count, 8); Index = (nicht signiert int) ((context-> count [0] >> 3) & 0x3f); padlen = (Index <56)? (56 - Index): (120 - Index); Md5Update (Kontext, Polsterung, Padlen); Md5Update (Kontext, Bits, 8); Codieren (Digest, Kontext-> Zustand, 16); memset ((Zeiger) Kontext, 0, sizeof (*Kontext)); } void Md5Digest (char *pszInput, unsigned long ninputsize, char *pszoutput) {Md5_ctx -Kontext; nicht signiert in len = strlen (pszinput); Md5Init (& context); Md5Update (& context, (unsigned char *) pszinput, len); MD5FINAL (((nicht signiertes char *) pszoutput, & Kontext); } main () {char SzDigest [16]; Char Encrypt [200]; printf ("请输入要计算 md5 值的字符串:"); bekommt (verschlüsseln); printf ("/n 加密结果:"); Md5Digest (Verschlüsselung, Strlen (Encrypt), SzDigest); int i; für (i = 0; i <16; i ++) printf ("%02x", (unsigned char) szDigest [i]); getChar ();}3 、运行效果
这里我们都以输入 123456 为例
(1) Java 输出结果如下 :
(2) C ++ 输出结果如下 :
以上就是小编为大家带来的 Java 与 c ++ 实现相同的 Md5 加密算法简单实例的全部内容了 , 希望对大家有所帮助 , 多多支持武林网 ~