android 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进行加密。

为什么Android使用弱加密算法

 

有人可能会怀疑美国国家安全局(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 具体的实现算法如下
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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下载 http://www.2cto.com/uploadfile/2014/1105/20141105014721577.rar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值