• 小牟Andorid下面MD5具体实现的思路总结


    Android的开发往往需要一定数目demo 

    从今起MD5一些加密算法提取物 看看是如何实现的

    首先,我们必须明确为什么加密?

    1 数据安全处理

    2 防止数据窃取

    3 有效的避免恶意攻击

    4 保证文件完整性

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

    以上是基本的加密技术的目的

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

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

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

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位password,与BlowFish一样TEA每次仅仅能加密/解密8字节数据。TEA特点是速度 快、效率高,实现也很easy。因为针对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 详细的实现算法例如以下

    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下载


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    安装和配置SQL
    自定义中间件封装为模块
    留言板
    Spring Factories机制
    JVM参数配置
    全链路监控的方案概述与比较
    Lombok注解-@SneakyThrows
    @FeignClient注解 中属性 contextId使用
    @validate或@valid注解进行数据校验的解决方案
    maven的settings.xml标签详解
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4633817.html
Copyright © 2020-2023  润新知