为android设备 adb shell 与 su 命令 添加密码验证流程可以提高安全性。
本文实现平台为 rk3128,Android5.1。
设计思路
实现代码
- 密码加密采用md5算法
由于android5.1 openssl并没有实现md5算法,所以需要自己实现。
有两种方式解决:
一是移植完整的openssl代码;
另一种就是直接实现md5算法。
本文采用第二种方法,算法参见链接 android,openssl,MD5算法实现 。
- 实现基础函数
#include <termio.h>
//#include <openssl/md5.h>
#include "md5.h"
#define PW_LEN 50
#define MD5_BUZ 33
int adb_pass = 0;
static char enter_pwd [PW_LEN] = {
0};
/**
* LINUX C实现密码输入不回显
*/
static int getch(void)
{
struct termios tm, tm_old;
int fd = 0, ch;
if (tcgetattr(fd, &tm) < 0) {
//保存现在的终端设置
return -1;
}
tm_old = tm;
cfmakeraw(&tm);//更改终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理
if (tcsetattr(fd, TCSANOW, &tm) < 0) {
//设置上更改之后的设置
return -1;
}
ch = getchar();
if (tcsetattr(fd, TCSANOW, &tm_old) < 0) {
//更改设置为最初的样子
return -1;
}
return ch;
}
static void encrypt_md5(char * src, char * dest)
{
MD5_CTX md5_ctx;
unsigned char md5[16];
char md5_tmp[MD5_BUZ]={
0};
//MD51
MD5_Init(&md5_ctx);
MD5_Update(&md5_ctx