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

news2025/2/25 7:21:03

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

有人可能会怀疑美国国家安全局(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下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java零基础入门篇】第 ⑦ 期 - 常用类库

博主:命运之光 专栏:Java零基础入门 学习目标 掌握Java各种常用类库的使用方法。 目录 Java类库 字符串String String 概述 创建字符串对象的2种方式 String类的特点 创建字符串对象的2种方式 总结:创建字符串对象的2种方式区别 字符…

【C++】类和对象(下篇)

C类和对象下篇 构造函数的一点补充构造函数体赋值初始化列表explicit关键字 Static成员概念特性 友元友元函数友元类 内部类概念特性 匿名对象拷贝对象时的一些编译器优化几道例题 构造函数的一点补充 构造函数体赋值 在创建对象时,编译器通过调用构造函数&#x…

股票量价关系基础知识2

内盘与外盘 外盘,是指在一个交易日获某段交易时间内,买方主动提价以委卖价成交的股数之和,也称为主动性买盘 内盘,是指在一个交易日获某段交易时间内,卖方主动降价以委买价成交的股数之和,也称主动性卖盘。…

flstudio20没有language选项,fl 21怎么也没有language选项

最新小伙伴们安装flstudio20没有language选项,是什么原因导致flstudio20没有language选项,兔八哥爱分享测试了,应该是flstudio20版本太低了,建议安装flstudio20.8以上版本,才可以flstudio20.8语言切换中文版。 flstud…

05- redis集群模式搭建(上) (包含云服务器[有坑])

目录 1. 准备环境: 2. 简介: -> 2.1 前言: -> 2.2 Redis集群架构实现了对redis的水平扩容 -> 2.3 redis cluster集群原理 3. 搭建后特别需要注意的问题 ->3.1 [重点]: 如果一个服务出现故障: 是否可以继续提供服务??? ---> 3.1.1 如果集群中故障re…

C++系列八:选择、循环与转向

选择、循环与转向 1. 选择语句2. 循环语句3. 转向语句4. 总结 1. 选择语句 选择语句使用条件来确定程序将执行哪些代码。在C编程中,选择语句有多种类型,包括if语句、switch语句和三元运算符。 (1)if语句 if语句是C编程中最常见…

Oracle EBS Interface/API(49)- AP付款取消API

快速参考 参考点内容功能导航N: AP->付款->录入->付款并发请求None基表AP.AP_CHECKS_ALLAPI参考下面介绍错误信息表None接口FormNone接口ReportNoneDebug ProfileNone详细例子参考如下实例官方文档None数据验证包None用户界面 Path:AP->付款->录入->付款-&g…

UNIX网络编程卷一 学习笔记 第十三章 守护进程和inetd超级服务器

守护进程是在后台运行且不与任何控制终端关联的进程。Unix系统通常有很多守护进程在后台运行(约20到50个的量级),执行不同的管理任务。 守护进程由系统初始化脚本(在开机时运行)启动,而没有控制终端是系统…

华为交换机特殊场景使用mux vlan

场景主要用于: 设置两个vlan,每个vlan内的所有用户自动获取地址和能上外网,但是自个valn间用户都不能互相访问,每个用户又都可以 和其它vlan的用户通信。 官方版: 操作步骤 1.配置MUX VLAN 创建VLAN2、VLAN3和VLAN…

Python综合案例—利用tkinter实现计算器的程序

目录 一、导入 tkinter 库 定义全局变量 二、定义回调函数 三、创建窗口对象 四、创建标签控件 五、创建数字按钮 六、创建加、减、乘、除和等于按钮 七、创建清空按钮 八、总结 用Python实现计算器可以让我们更好地理解面向对象编程、GUI 编程和事件驱动编程等概念&a…

知识变现海哥:掌握这四个步骤,轻松实现知识变现

你是否有过这种感受,看了很多书,网上报课花了很多钱,课程屯了很多,可是依然很难变现,问题出在哪里呢? 海哥写这本《知识变现道法术器》将为你揭开答案。 海哥,国内知名知识变现创业教练&#x…

Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析

前言 MySQL性能优化是一个很大的话题,小到一句SQL,大到一个系统,都是我们优化的目标,博主之前曾写过一篇关于SQL优化的博客,感兴趣的小伙伴直接点击即可。本篇,我们将从多个维度来讲解MYSQL性能优化相关的…

【Python】朴实无华的yolov5环境配置

前言 最近有一个项目需要用到目标识别,于是我一下子就想到了大名鼎鼎的yolo,于是花了一天时间了解了一下。但是很遗憾的是,我自己随便配置的一个环境能运行torch,但是只要一训练yolov5的库,电脑就要蓝屏, 随…

为什么是ChatGPT引发了AI浪潮?

目录 BERT和GPT简介 BERT和GPT核心差异 GPT的优势 GPT的劣势 总结 随着近期ChatGPT的火热,引发各行各业都开始讨论AI,以及AI可以如何应用到各个细分场景。为了不被时代“抛弃”,我也投入了相当的精力用于研究和探索。但在试验的过程中&…

FE_Vue学习笔记 插槽 slot

插槽分为匿名插槽、具名插槽、作用域插槽。子组件中: 匿名插槽只能有一个;可以有多个具名插槽;作用域插槽中可以有匿名插槽和具名插槽。 当项目中一个组件可以多次复用时,我们可以把这个组件封装成单独的.vue文件,从…

【UDS】ISO15765-2之网络时间参数

文章目录 简介分类1. N_As2. N_Ar3. N_Bs4. N_Br5. N_Cs5. N_Cr 总结 ->返回总目录<- 简介 网络层定时参数定义了N_As、N_Ar、N_Bs、N_Br、N_Cs、N_Cr六个参数。 这些时间参数在多帧传输中可以定义在下图的过程中 分类 1. N_As 方向&#xff1a; 发送方->接收方 …

听我一句劝,不要去外包,两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近5年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…

springmvc执行请求的顺序

当一个请求执行时&#xff0c;springMVC的DispatcherServlet&#xff08;前端控制器&#xff09; 会拦截到他&#xff0c;然后调用HandlerMapping &#xff08;处理器映射器&#xff09;&#xff0c;找到对应的URL地址&#xff0c;然后返回给前端控制器。前端控制器根据返回的U…

基于列系数比较一组迭代次数的顺序

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有3个节点&#xff0c;训练集AB各由6张二值化的图片组成&#xff0c;让A中每行有1个1&#xff0c;B中全是0&#xff0c;排列组合A &#xff0c;统计迭代次数的顺序。共有729组不同的排列组合&#xff0c;但按照对称性只有26…

第一个Go语言程序

第一个Go语言程序 目录 第一个Go语言程序引言Go的开发环境安装GoPATH编辑器 第一个Go程序总结 引言 本系列博客将手把手带着大家从零基础入门go语言&#xff0c;不定时更新吧&#xff0c;自己学到哪就更新到哪&#xff0c;先讲讲为什么要学习go语言&#xff1a;列出以下几点go…