android环境下两种md5加密方式

在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来。虽然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 <jni.h>
#include <stdio.h>
#include <string.h>
#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源码文件较长,就不显示在这里了,想研究的同学可以下载完整工程查看,工程下载链接为:http://download.csdn.net/detail/u013085897/8097613。工程运行结果如下图所示,hello
world为待加密的字符串。

时间: 2024-08-24 08:46:49

android环境下两种md5加密方式的相关文章

flink on yarn模式下两种提交job方式

flink on yarn模式下两种提交job方式 https://juejin.im/post/5bf8dd7a51882507e94b8b15 https://www.cnblogs.com/asker009/p/11327533.html https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/deployment/yarn_setup.html#flink-yarn-session 原文地址:https://www.

Android 编程下两种方式注册广播的区别

常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册.这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的.示例代码如下: <!-- 订阅开机结束广播 --> <receiver android:name=".receiver.BootCompleteReceiver" > <intent-

转 Android 编程下两种方式注册广播的区别

常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册.这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的.示例代码如下: <!-- 订阅开机结束广播 --> <receiver android:name=".receiver.BootCompleteReceiver" > <intent-

将Eclipse代码导入到Android Studio的两种方式

转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建的项目,我们都会面临的问题是原先Eclipse的代码该怎么导入到Android Studio中使用.这方面相关的资料还比较少,自己摸索了一下,总结出这篇博客,希望能让开发者少走些弯路.OK,进入正题. Google为了让我们更加方便的使用AndroidStudio,提供了两种导入Eclipse代码的

(转发 )将Eclipse代码导入到Android Studio的两种方式

这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 说到使用Android Studio,除了新建的项目,我们都会面临的问题是原先Eclipse的代码该怎么导入到Android Studio中使用.这方面相关的资料还比较少,自己摸索了一下,总结出这篇博客,希望能让开发者少走些弯路.OK,进入正题. Google为了让我们更加方便的使用AndroidStudio,提供了两种导入E

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

Android系统从驱动到上层服务再到应用的两种服务架构方式 1)使用类似sensor service的方式: 此方式用于,service的接口不想暴露给上层activity直接使用的情形例如sensor架构c/s结构,适合多个应用与单个服务通信,binder通信时,做connection的区分即可区分不同的client. 2)使用AIDL直接暴露接口的方式: 这个更适合单个应用与服务通信,多个应用与服务通信时,需要处理接口的重入问题.利用Binder实现的标准JNI,不用你去专门实现自己的JN

Android环境搭建与通过命令行方式创建Android应用

  实验 通过命令行方式创建Android应用 本文主要是先搭建Android环境,再通过命令行方式创建一个Android应用:使用Ant进行编译和打包:使用adb进行部署. (本文主要是为了防止以后再次搭建Android环境的时候忘记步骤...) 实验步骤: 建立实验环境 ①下载ANT 首先从 http://ant.apache.org/bindownload.cgi 下载Apache Ant 如下图进入该页面 访问http://ant.apache.org/bindownload.cgi,选

UIImage的两种加载方式

UIImage的两种加载方式 1.有缓存:读取后放入缓存中下次可直接读取,适用于图片较少且频繁使用. [UIImage imageNamed:@"文件名"]: 在缓存中由系统管理,当收到memoryWarning时会释放这些内存资源. 2.无缓存:用完就释放掉,参数传的是全路径,适用于图片较多较大的情况下. NSString *path = [[NSBundlemainBundle] pathForResource: @"1.png"ofType: nil]; [U

Linux驱动的两种加载方式过程分析

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行