1 、java版
パッケージcom.lyz.utils.common; java.io.unsupportedencodingexceptionをインポートします。 java.security.messagedigestをインポートします。 java.security.nosuchalgorithmexceptionをインポートします。 / ** * md5 try {MessagedGest MD = MessagedGest.getInstance( "MD5"); byte [] hash = md.digest(message.getBytes( "utf-8")); //バイト配列をHexadecimal StringStringBuilder sb = new StringBuilder(2 * Hash.Length)に変換する; for(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); }ダイジェストを返します。 } 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、unsigned long ninputsize、char *pszoutput);
(2)md5.cpp
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> ninclude "md5.h" typedef unsigned char *pointer; typedef unsigned short int uint2; typedef unsigned long int uint4; typedef struct {uint4 state [4]; uint4 count [2];署名されていないcharバッファー[64]; } md5_ctx; void md5init(md5_ctx *); void md5update(md5_ctx *、unsigned char *、unsigned int); void md5final(unsigned 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 15 #define S44 21静的符号なしのチャーパディング[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))) (〜Z)) (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 encode(unsigned char *output、uint4 *input、unsigned int len){unsigned int i、j; for(i = 0、j = 0; j <len; i ++、j+= 4){output [j] =(unsigned char)(input [i]&0xff);出力[j+1] =(unsigned char)((input [i] >> 8)&0xff);出力[j+2] =(unsigned char)((input [i] >> 16)&0xff);出力[j+3] =(unsigned char)((input [i] >> 24)&0xff); }} inline void decode(uint4 *output、unsigned char *input、unsigned int len){unsigned int i、j; for(i = 0、j = 0; j <len; i ++、j+= 4)output [i] =((uint4)input [j])| (((UINT4)入力[J+1])<< 8)| (((UINT4)入力[J+2])<< 16)| (((UINT4)入力[J+3])<< 24); } inline void md5transform(uint4 state [4]、unsigned char block [64]){uint4 a = state [0]、b = state [1]、c = state [2]、d = state [3]、x [16];デコード(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); state [0] += a;状態[1] += b;状態[2] += c;状態[3] += d; memset((pointer)x、0、sizeof(x)); } inline void md5init(md5_ctx *context){context-> count [0] = context-> count [1] = 0; context-> state [0] = 0x67452301; context-> state [1] = 0xefcdab89; context-> state [2] = 0x98badcfe; context-> state [3] = 0x10325476; } inline void md5update(md5_ctx *コンテキスト、unsigned char *input、unsigned int inputlen){unsigned int i、index、partlen; index =(unsigned int)((context-> count [0] >> 3)&0x3f); if((context-> count [0]+=((uint4)inputlen << 3))<((uint4)inputlen << 3))context-> count [1] ++; context-> count [1] +=((uint4)inputlen >> 29); Partlen = 64 -Index; if(inputlen> = partlen){memcpy((pointer)&context-> buffer [index]、(pointer)input、partlen); md5transform(context-> state、context-> buffer); for(i = partlen; i + 63 <inputlen; i + = 64)md5transform(context-> state、&input [i]); index = 0; } else i = 0; memcpy((pointer)&context-> buffer [index]、(pointer)&input [i]、inputlen-i); } inline void md5final(unsigned char Digest [16]、md5_ctx *context){unsigned charビット[8]; Unsigned Int Index、Padlen;エンコード(bits、context-> count、8); index =(unsigned int)((context-> count [0] >> 3)&0x3f); padlen =(index <56)? (56 -INDEX):(120 -INDEX); md5Update(コンテキスト、パディング、パドレン); md5Update(コンテキスト、ビット、8);エンコード(Digest、Context-> State、16); memset((pointer)context、0、sizeof(*context)); } void md5digest(char *pszinput、unsigned long ninputsize、char *pszoutput){md5_ctx context; unsigned int len = strlen(pszinput); md5init(&context); md5Update(&context、(unsigned char *)pszinput、len); md5final((unsigned char *)pszoutput、&context); } main(){char szdigest [16]; Char Encrypt [200]; printf( "请输入要计算md5值的字符串:"); gets(encrypt); printf( "/n加密结果:"); md5digest(encrypt、strlen(encrypt)、szdigest); int i; for(i = 0; i <16; i ++)printf( "%02x"、(unsigned char)szdigest [i]); getchar();}3 、运行效果
这里我们都以输入123456为例
(1)Java输出结果如下:
(2)C ++输出结果如下:
以上就是小编为大家带来的java与C++