1.首先加上一些库:apt-get install openssl libssl-dev libssl-doc libcurl4-openssl-dev
2.实现一个用MD5加密密码的小程序:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<openssl/hmac.h> #include<openssl/md5.h> int output(char *p,unsigned char* pwd, int len) { int i; printf("%s",p); for(i=0;i<len;i++) { printf("%x",pwd[i]); } printf("\n"); return 0; } int main(int argc, char *argv[]) { if(argc<2) { fprintf(stderr,"%s <original password><salt password><hash length>\n",argv[0]); return 1; } int i,hashLen; unsigned char *originalPwd; unsigned char *saltPwd; originalPwd = (unsigned char *)malloc(strlen(argv[1])+1);//argv[1]是初始密码 saltPwd = (unsigned char *)malloc(strlen(argv[2])+1); //argv[2]是加盐:是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符 strcpy(originalPwd,argv[1]); strcpy(saltPwd,argv[2]); hashLen = atoi(argv[3]); //设置加密密码的长度 unsigned char encryptPwd[hashLen]; printf("Before add salt into the original password:\n"); MD5((unsigned char *)originalPwd,strlen(originalPwd),encryptPwd);//使用MD5算法对密码进行加密(不加盐),并输出加密前后密码 output("Original Password = ",(unsigned char *)originalPwd,strlen(originalPwd)); output("Encrypt Password = ",(unsigned char *)encryptPwd,hashLen); printf("\nAfter add salt into the original password:\n"); memset(encryptPwd,0,sizeof(encryptPwd)); strcat(originalPwd,saltPwd); MD5((unsigned char *)originalPwd,strlen(originalPwd),encryptPwd);//使用MD5算法对密码进行加密(加盐),并输出加密前后密码 output("Original Password = ",(unsigned char *)originalPwd,strlen(originalPwd)); output("Encrypt Password = ",(unsigned char *)encryptPwd,hashLen); return 0; }
gcc md5test.c -o md5test -lcrypto
./md5test lebaishi wahaha 13
3.Java方法
假设我们想要对同一个字符串:"add and remove ip whitelist dynamically"进行MD5加密。
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { public static void main(String[] args) throws NoSuchAlgorithmException{ String token = getMD5(); System.out.println("token = " + token); } static String getMD5() throws NoSuchAlgorithmException{ String plainText = "add and remove ip whitelist dynamically"; MessageDigest md5 = MessageDigest.getInstance("md5"); byte[] cipherData = md5.digest(plainText.getBytes()); StringBuilder builder = new StringBuilder(); for(byte cipher : cipherData) { String toHexStr = Integer.toHexString(cipher & 0xff); builder.append(toHexStr.length() == 1 ? "0" + toHexStr : toHexStr); } //System.out.println(builder.toString()); return builder.toString(); } }结果:token = 490c4ac2f07fdf3c3699536c398f8404
4.Python方式
4.1 对字符串计算md5:
import hashlib m = hashlib.md5() str = "add and remove ip whitelist dynamically" m.update(str) print m.hexdigest()结果: 490c4ac2f07fdf3c3699536c398f8404
4.2 对文件计算md5:
#!/usr/bin/env python import hashlib,os,sys def getFileMD5(filepath): if os.path.isfile(filepath): f = open(filepath,'rb') md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() f.close() return str(hash).lower() return None current_path = os.path.dirname(os.path.realpath(__file__)) file_name = current_path + os.path.sep + "file1" print getFileMD5(file_name)
5.Shell方式
5.1 对字符串计算md5:
`echo -n "add and remove ip whitelist dynamically" | md5sum`
一条命令即可。
5.2 对文件计算md5:
md5sum file1 | awk '{print $1}'