在平时开发过程中,MD5加密是一个比較经常使用的算法,最常见的使用场景就是在帐号注冊时,用户输入的password经md5加密后,传输至server保存起来。尽管md5加密经经常使用。可是md5的加密原理我还真说不上来,对md5的认知眼下只停留在会使用的水平。想搞清楚还是要花点时间的。这是md5加密算法的相关介绍。本文主要介绍android平台下两种md5加密方式,分别为基于java语言的md5加密及ndk环境下基于c语言的md5加密。

以下代码为基于java语言的md5加密:

public String getMD5(String info)

{

try

{

MessageDigest md5 = MessageDigest.getInstance("MD5");

md5.update(info.getBytes("UTF-8"));

byte[] encryption = md5.digest();

StringBuffer strBuf = new StringBuffer();

for (int i = 0; i < encryption.length; i++)

{

if (Integer.toHexString(0xff & encryption[i]).length() == 1)

{

strBuf.append("0").append(Integer.toHexString(0xff & encryption[i]));

}

else

{

strBuf.append(Integer.toHexString(0xff & encryption[i]));

}

}

return strBuf.toString();

}

catch (NoSuchAlgorithmException e)

{

return "";

}

catch (UnsupportedEncodingException e)

{

return "";

}

}

以下代码为ndk环境下基于c语言的md5加密:

#include

#include

#include

#include "md5.h"

// md5加密

JNIEXPORT jstring JNICALL Java_com_example_testmd5_MainActivity_encryptByMD5(JNIEnv *env, jclass obj, jstring strText)

{

char* szText = (char*)(*env)->GetStringUTFChars(env, strText, 0);

MD5_CTX context = { 0 };

MD5Init(&context);

MD5Update(&context, szText, strlen(szText));

unsigned char dest[16] = { 0 };

MD5Final(dest, &context);

(*env)->ReleaseStringUTFChars(env, strText, szText);

int i = 0;

char szMd5[32] = { 0 };

for (i = 0; i < 16; i++)

{

sprintf(szMd5, "%s%02x", szMd5, dest[i]);

}

return (*env)->NewStringUTF(env, szMd5);

}

只是上述代码只为当中一部分,由于md5加密算法的c源代码文件较长,就不显示在这里了。想研究的同学能够下载完整project查看,project下载链接为:http://download.csdn.net/detail/u013085897/8097613。project执行结果例如以下图所看到的,hello

world为待加密的字符串。

android登录加密传输,android环境下两种md5加密方式(示例代码)相关推荐

  1. Win32环境下两种用于C++的线程同步类(上)

    线程同步是多线程程序设计的核心内容,它的目的是正确处理多线程并发时的各种问题,例如线程的等待.多个线程访问同一数据时的互斥,防死锁等.Win32提供多种内核对象和手段用于线程同步,如互斥量.信号量.事 ...

  2. android gradle两种多渠道打包方式

    android gradle两种多渠道打包方式 gradle多渠道打包,目前已经了解到的有两种方式: 一种是利用gradle的manifestPlaceholders属性来替换渠道值 另一种是不同的渠 ...

  3. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  4. Oracle DataGuard环境下使用TDE透明加密需要注意的点

    DataGuard环境下使用TDE透明加密: 开启TDE: 1.创建一个新目录,并指定为wallet目录 $ mkdir -p /oracle/wallet 并设置wallet目录,方法很简单,编辑参 ...

  5. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  6. Android Studio无线Wifi调试手机的两种方案

    Android Studio无线Wifi调试手机的两种方案 第一种方式 使用adbWireless连接 第二种方式 使用插件Android Wifi ADB连接 总结 第一种方式 使用adbWirel ...

  7. Android系统从驱动到上层服务再到应用的两种服务架构方式

    Android系统从驱动到上层服务再到应用的两种服务架构方式 1)使用类似sensor service的方式: 此方式用于,service的接口不想暴露给上层activity直接使用的情形 例如sen ...

  8. 登录与注册时两次md5加密过程详解

    1 当前端传送密码到后端时候,需要进行两次MD5加密,登录和注册时的加解密流程是怎么样的? 前端和后端加密都可以规定使用密码的某几位作为盐进行加解密操作,而这种约定俗成的盐选取操作只有程序员自己知道, ...

  9. Android Studio打不开虚拟机,两种情况详解

    Android Studio打不开虚拟机,两种情况详解 文章目录 Android Studio打不开虚拟机,两种情况详解 1.VT-x is disabled in BIOS 2.Emulator文件 ...

最新文章

  1. 怎样看python源代码-如何直接从IDE读取Python源代码
  2. 图像形状特征(一)--FD
  3. 17track逆向分析
  4. Bridge的父应用程序不是现用应用程序
  5. 最小割集Stoer-Wagner算法
  6. 数据库系列之MySQL表ibd文件删除恢复
  7. 如何使用 Alink 进行中文情感分析?
  8. 【算法导论】 二叉搜索树、AVL树、和红黑树
  9. 联通光猫CUAdmin获取
  10. 用记事本编写小游戏_一款适合你的记事本——提高你工作的效率!
  11. 公主连结显示服务器内部错误,公主连结进不去怎么办 进不去解决办法
  12. js文件在谷歌浏览器上显示乱码问题
  13. java时间日期获得0点0分0秒(本地时间(时区)),获取当天零点零分时间(本地时间(时区))
  14. bcd转ascii码 流程图_BCD码与ASC码互转 | 学步园
  15. 217公斤小伙不堪重负切胃减肥
  16. Android 一直出现waiting for debugger解决
  17. qpOASES使用笔记
  18. Qt编写物联网管理平台22-报警联动
  19. java 狗带风波_狗狗风波
  20. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!

热门文章

  1. 网络协议:HTTP的升级改进
  2. 对着网页进行右键操作------审查元素(快速查看标签代码)
  3. 在职场如何应对他人的关注
  4. CES生产函数中参数的意义
  5. 5.2 网络数据Excel存储
  6. HashMap的应用
  7. 如何获取所有基因的转录起始位点--转载
  8. 存储系统——主存储器
  9. 【meshlab使用指南】06、Select Faces/Vertices inside polyline area功能不能选中点/面
  10. 【Theano】安装教程