linux数据库中使用MD5加密

MD5加密算法源码下载:https://pan.baidu.com/s/1nwyN0xV

下载完成了之后解压,得到两个文件

环境搭建:

1、把md5.h文件拷贝到/usr/include/目录下

sudo cp md5.h /usr/include

2、编译生成.o文件

 gcc -fPIC -o md5.o -c md5.c -lpthread -ldl

3、编译生成.so文件

gcc -shared -fPIC -o libmd5.so md5.o -lpthread -ldl

4、把生成的.so文件拷贝都/lib/目录下,方便使用

sudo cp libmd5.so /lib/

其中我们使用到了MD5中数据加密函数

void MD5Str(char *input, unsigned char *output);
参数: input:要加密的数据
      output:加密后的数据

程序mysqlite3.c如下:

  1 #include <sqlite3.h>
  2 #include <stdio.h>
  3 #include <string.h>
  4 #include "md5.h"
  5
  6 /*定义此宏时使用回调函数查询否则只是用非回调函数查询*/
  7 //#define CALLBACK
  8
  9 /*定义创建表格指令IF not EXISTS:不存在,AUTOINCREMENT:自动增加主键,not NULL:不能为空*/
 10 #define CREATE "create table IF not EXISTS passwd(id integer primary key AUTOINCREMENT,username text not NULL,password text not NULL)"
 11 /*定义查询数据指令*/
 12 #define SELECT "select * from passwd where username=‘%s‘ and password=‘%s‘"
 13 /*定义插入数据指令*/
 14 #define INSERT "insert into passwd(username,password) values(‘%s‘,‘%s‘)"
 15
 16 /*如果查询到多行数据, 那么这个函数就会调用多次(每一行调用一次)*/
 17 int callback(void *arg, int col, char **value, char **name)
 18 {
 19     int i=0;
 20     for(i=0;i<col; i++)
 21     {
 22         printf("%s\t", value[i]);
 23     }
 24     printf("\n");
 25     return 0;
 26 }
 27
 28
 29 int main(void)
 30 {
 31
 32     //1.打开数据库
 33     sqlite3 *ppdb = NULL;
 34     int ret = sqlite3_open("./passwd", &ppdb); /*我们之前要先创建一个名字叫passwd的数据库*/
 35     if(ret != SQLITE_OK)
 36     {
 37         perror("open fail");
 38         return -1;
 39     }
 40     sqlite3_exec(ppdb,CREATE,NULL,NULL,NULL); /*创建一个表格*/
 41     char temp[32];
 42     char temp1[32];
 43     char insert[strlen(temp)+strlen(temp1)+200]; /*这里的数组要给大一点,因为等下加密的时候会得到一串很长的数据*/
 44     printf("please input your username:");
 45     scanf("%s",temp);
 46     printf("please input your password:");
 47     scanf("%s",temp1);
 48     MD5Str(temp1,temp1);/*把输入的密码使用md5加密存储在数据库表格中*/
 49     printf("1111\n");
 50
 51
 52     sprintf(insert,INSERT,temp,temp1);/*打包数据,准备插入到表格中*/
 53
 54     sqlite3_exec(ppdb,insert,NULL,NULL,NULL);
 55
 56
 57     char username[32];
 58     char password[33];
 59     printf("input username:");
 60     scanf("%s",username);
 61     printf("input password:");
 62     scanf("%s",password);
 63
 64     MD5Str(password,password);/*把输入的密码使用md5加密之后与数据库表格中的密码匹对*/
 65     char sql[strlen(SELECT)+strlen(username)+strlen(password)];
 66
 67     /*打包一个字符串,将SELECT字符串放到sql中,username和password这两个变量放大SELECT中*/
 68     sprintf(sql,SELECT,username,password);
 69
 70
 71     #ifdef CALLBACK
 72     //回调查询
 73     char *selectsql = "select * from myname";
 74     ret = sqlite3_exec(ppdb, selectsql, callback, NULL, NULL);
 75     if(ret != SQLITE_OK)
 76     {
 77         perror("create fail");
 78         sqlite3_close(ppdb);
 79         return -1;
 80     }
 81
 82     //非回调查询
 83     #else
 84     char **result = NULL;
 85     int row = 0;
 86     int col = 0;
 87     char *error  = NULL;
 88     ret = sqlite3_get_table(ppdb,sql,&result,&row,&col,&error);
 89     if(ret != SQLITE_OK)
 90     {
 91         perror("get table fail");
 92         return -1;
 93     }
 94
 95     int i=0, j=0;
 96     for(i=0;i<row+1;i++)
 97     {
 98         for(j=0;j<col;j++)
 99         {
100             printf("%s\t",result[j+i*col]);
101         }
102         printf("\n");
103     }
104
105     if(row > 0) /*数据匹配成功*/
106         printf("checked OK\n");
107     else  /*数据匹配失败*/
108         printf("fail\n");
109     sqlite3_free_table(result);//释放结果
110     #endif
111
112
113     sqlite3_close(ppdb);
114     return 0;
115 }

我们先要创建一个名字叫passwd数据库,如果不懂创建可以看看我的这篇文章:linux数据库环境搭建

sqlite3 passwd

接着我们编译程序

gcc -o mysqlite3 mysqlite3.c -lsqlite3 -lmd5

 

运行结果如下:

原文地址:https://www.cnblogs.com/wurenzhong/p/8321046.html

时间: 2024-08-12 17:19:17

linux数据库中使用MD5加密的相关文章

java中使用MD5加密的算法

MD5,全名Message Digest Algorithm 5,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.以下是JAVA语言中使用MD5加密的工具类. import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { /** * 对字符串进行MD5摘要加密,返回结果与MySQL的MD5函数一致 *

JAVA中使用MD5加密工具类实现对数据的加密处理

1.MD5工具类 package com.ssm.util; import java.security.MessageDigest; public class MD5Util { //将字节数组转成十六进制字符串 private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) resultSb.

IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现

看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous------------------ [1]新建工程,新建分类 [2]分类的命名方式以及类的选择 [3]书写NSString分类的类方法,以及实现类方法,以及MD5如何加密 [4]测试加密结果 [5]解密:直接百度MD5解密,随便点歌网站进去,输入解密KEY,在我这个Demo中, wolfhous正常加密44bf025

LoadRunner 中实现MD5加密

最近在用loadrunner做一个压力测试,在编写脚本的时候发现传递参数的时候需要一个sign值,这个值是将参数进行MD5加密生成的,所以下面就说一说怎么对参数进行MD5加密. 1.首先我们需要一个加密算法的文件叫做:md5.h文件 我们可以新建一个md5.h文件,至于里面具体的算法网上都有下载,具体如下(直接将下面的算法拷贝到md5.h文件中): #ifndef MD5_H#define MD5_H#ifdef __alphatypedef unsigned int uint32;#elset

asp.net中实现MD5加密、解密的方法

这个MD5加密.解密的方法会使用即可. 使用时的代码备忘:Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile("要加密的字符串", "MD5")); 以下是加密.解密的代码部分: /*用法 protected void Page_Load(object sender, EventArgs e) { //加密 this.Title = CEncrypt.DesEncrypt(&qu

Oracle中的MD5加密

作者:iamlaosong 因为要用到MD5加密,所以在网上搜了一下相关资料,并进行仔细研究.其核心就是MD5编码的数据包函数:DBMS_OBFUSCATION_TOOLKIT.MD5,这里涉及到RAW类型,其实就是原始的代码值. MD5加密的结果就是16个byte值,也就是是RAW类型,是显示不出来的,要正确显示,需要经过Utl_Raw.Cast_To_Raw转换,这个函数的作用是将每个字节的ASCII码值用字符表示出来.为了说明清楚,举例如下:假定一个字节的二进制值是0100 0001,十六

MySQL——数据库级别的MD5加密

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致.主要增强算法复杂度和不可逆性. MD5 不可逆,但是具体的简单值的 md5 是一样的 MD5 破解网站的原理,背后有一个字典对照 测试MD5加密: -- =========测试MD5 加密======= CREATE TABLE `testmd5`( `id` INT(4) NOT NUL

Oracle中的MD5加密详解

一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于SELECT语句. 2.Utl_Raw.Cast_To_Raw DBMS_OBFUSCATION_TOOLKIT.MD5返回的字

iOS 中使用md5加密

#import <CommonCrypto/CommonDigest.h> @implementation MD5Util +(NSString *)encode:(NSString *)value{ [value retain]; const char *cStr = [value UTF8String]; [value release]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); // This is t