小沐Andorid下面的MD5详细实现思路小结

安卓开发中时常需要些一些demo

现在就MD5加密算法进行一些抽取 看看都是怎么实现的

首先我们要明白为什么要加密?

1 对数据进行安全性处理

2 防止数据被盗

3 有效的避免恶意攻击

4 保证文件完整性

5 优化搜索 作为文件(数据)索引存在等

以上是主要的加密技术的目的

2 目前在安卓中使用的加密技术都有哪些?

这个是网站上找到的一些资料 主要是2中算法 一个是SHA1算法 一个就是MD5加密 

其他的还有TEA对称型加密算法 效率比较高

TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA特点是速度 快、效率高,实现也非常简单。由于针对TEA的攻击不断出现,所以TEA也发展出几个版本,分别是XTEA、Block TEA和XXTEA。

Android 2.2.1默认使用的加密算法是AES 256-SHA1,但从2010年发布的Android 2.3开始,它默认使用的是一种更弱的加密算法 RC4-MD5。当Android应用建立SSL加密连接,如果没有指定的话它将默认使用RC4-MD5进行加密。

有人可能会怀疑美国国家安全局(NSA)收买了Android开发者以降低破解加密连接监视Android用户的难度。但Georg Lukas在分析了Android源代码之后发现,默认加密算法的次序是Sun/甲骨文的Java定义的,Java规格定义的TLS安全传输协议加密算法列表中前两种为RC4和MD5,2011年发布的Java 7加入椭圆曲线加密算法改进了加密列表,但Android是基于 JDK 6,仍然沿用十年前定义的默认加密算法列表。

接下来我们主要使用的还是SHA1 和 MD5 那么我们如何实现一个MD5加密呢

一般我们在实现MD5加密主要有以下几个步骤

1 首先得到一个信息摘要器 MessageDigest 然后设置MD5

2  我们获取要加密的数据 例如 password=“123456”

3 将这些数据转换成字节数据 password.getBytes()

4 循环对每个字节数进行处理

这里主要是做2个处理 一个是 对每个字节数据进行 与运算 一般是与上一个16进制的数

例如 int number = p $ 0xff;

然后 将得到的number‘进行转换为16进制的数

Integer.toHexString(number);

如果这个数转换后的长度为1 那么我们就补0

不满八个二进制那么我们就补全

算法思想:

1 用每个byte去和11111111做与运算 并且得到的是一个int类型的值 byte&11111111

2 把int类型转换成16进制并返回String类型

3 不满8个2进制位就补全

5 具体的实现算法如下

public class Demo {
	public static void main(String[] args) throws NoSuchAlgorithmException {
		//信息摘要器
		MessageDigest digest = MessageDigest.getInstance("md5");
		String password = "123456";//加密字符
		StringBuffer buffer = new StringBuffer();
		byte [] result = digest.digest(password.getBytes());
		for (byte b : result) {
			int number = b & 0xff;//不按标准加密
			//转换成16进制
			String numberStr = Integer.toHexString(number);
			if (numberStr.length()==1) {
				buffer.append("0");
			}
			buffer.append(numberStr);
		}
		//MD5加密结果
		System.out.println(buffer.toString());
	}
}

一般大型网站或者银行 都是对数据进行多次MD5 加密 一般在5次以上银行一般在20次左右 所以很难被破解 还有就是 在进行每个byte运算的时候并不一定是按照标准的与16位进行加密 可以使用任意的方式进行 比如与上一个32位的数据 或者夹杂其他字符 甚至可以取反等方式进行加密 这些都被称为加盐

在andorid中我们主要是使用MD5Utils工具进行加密 默认使用标准加密方式

例如 我们可以在我们要加密的地方 这样做

String password = "123456";

MD5Utils.encode(password);

这里有一个MD5Utils的小加密工具 传上来大家可以看看

MD5Utils下载

时间: 2024-11-29 02:38:01

小沐Andorid下面的MD5详细实现思路小结的相关文章

andorid下的Public.xml 怎么使用小结

用 apktoool 反编译过 apk ,反编译后在res/values 下有一个 public.xml 文件 <?xml version="1.0" encoding="utf-8"?> <resources> <public type="attr" name="bg_category" id="0x7f010000" /> <public type="

各种Windows下面的gcc native build环境的比较

http://i.rexdf.org/blog/2015/04/04/fa-xian-ge-xin-huan-jing-msys2/ 最近注意到了一个新的Windows上面的模拟Linux的项目.一般来说两大主流阵营MingW与Cygwin,这两个思路各不相同.相对来说 MingW性能比较好,尽可能用WinAPI替代实现.Cygwin则是添加了一个层,利用很多dll来模拟Linux的那些syscall(典型的如 fork).所以cygwin程序一般都是需要有cygwin的dll在path里面才可

Linux下面的yum命令详解

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记. yum的命令形式一般是如下:yum [options] [command] [package ...]其中的[opti

Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)

搭建的环境:eclispe下面的maven web项目 Struts:    2.5.10 Spring:    4.3.8 Hibernate:   5.1.7 .Final MySQL:   5.1.30 先来详细的讲解一下SSH框架的整合,在这里是将struts2.0的Action的创建工作由Spring进行统一管理,主要是利用了Spring 控制反转和依赖注入的功能. 而将hibernate.cfg.xml整合Spring的配置文件中.而且利用Spring的面向切向功能对Hibernat

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: (一):通过[top -p 12377 -H] 查看java进程的有哪些线程的运行情况:       和通过[jstack 12377 > stack.log]生成Java线程的dump详细信息: 先用top命令找出占用资源厉害的java进程id,如图:# top 如上

快速遍历对比两个文件下的md5值

[[email protected] Activity]# find /opt/xyrpg/rpgserver_s1/XMLData/Activity/ -type f -exec md5sum {} \;|sed 's/rpgserver_s1/rpgserver_s2/'|md5sum -c /opt/xyrpg/rpgserver_s2/XMLData/Activity/ActivityCondition.xml: FAILED /opt/xyrpg/rpgserver_s2/XMLDat

客户端访问WEB-INF下面的jsp页面

一.作用 对于/web-INF/及其子目录,不允许直接的公共访问,所以就可以起到保护这些代码未经授权的访问和窥视,更好的保护了源代码. 写一个servlet,作为客户端的跳转. 二.代码 package com.cxhd.nurse.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import jav

怎么使用瓦特平台下面的“代码工厂”快速生成BS程序代码

这里说一下怎么使用瓦特平台下面的“代码工厂”快速生成程序代码 使用平台:windows+"visual studio 2010"+"SqlServer2000+" 结构:B/S 生成的结构:前端Html和JS.数据库sql,底层ajax,底层数据交互! 免费下载客户端:(永久有效)----------此版本不附带权限控制! http://pan.baidu.com/s/1hqtGGlA 代码生成介绍 1:打开瓦特平台的设计器: 点击提交:出现---> 在你的机

Circos在windows环境下运行的详细教程

#################################################################################### 一.下载安装circos及perl ##################################################################################### 1. 安装Perl运行circos需要Perl来编译其各种code,unix环境默认安装Perl的,而对于windows用