Android常用的加密算法

2023-11-19

一、MD5

MD5可以说是最基本最常用的加密算法了。(还依稀记得在校招面试的时候被问到过...)

MD5信息摘要算法(MD5 Message-Digest Algorithm)。算法能将任意大小、格式的文字或文件进行加密从而产生 128 bit(16 字节)的散列值。不论输入的的串是多长(1-无穷),生成的MD5值都是128bit。

2009年,中科院的谢涛和冯登国仅用了的碰撞算法复杂度,破解了MD5的碰撞抵抗,该攻击在普通计算机上运行只需要数秒钟。

想想也知道不论多长的串,都可以生成128bit的值,128bit可表示的数是有限的,而串的个数是无限的,总会有碰撞。不过这并不影响MD5的运用。MD5的常见应用场景如下:

1. 用于密码管理

当数据库中存储密码明文时,管理人员就可以很容易地看到明文,这些信息泄露,密码很容易被破译。MD5就在这里起到作用,在数据库中保存密码的MD5序列,只有相同的密码才能生成指定的MD5序列,MD5序列长度都是一样的。使用时,将密码的MD5值与数据库中的密文比较,如果相同就认为密码正确。增加密码的安全性。

2. 电子签名

这也是最常见的应用场景,具体操作是比较两个文件的MD5值是否相同,来判断是否是同一个文件。通常用于文件传输后,进行比对,文件的MD5值相同就认为文件下载正常。也可以判断出文件在传输过程中是否被修改。

3. 垃圾邮件筛选

原理也很简单,将邮件的内容生成MD5值,如果相同的MD5值很多,就判断邮件是垃圾邮件。

二、BASE64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

简单地说,BASE64可以把任意的二进制数据,转换为64个可打印字符的排列组合。

BASE64说它是加密,任何人都可以对其进行解密,其一般不用来加密数据,目的只是为了保护原内容不被直观地看到。

三、异或加密

原理很简单,例如data是0110,key是1010,加密过程:data  key = 1100(位运算,相同为0,不同为1)。解密过程是使用加密的结果再与key进行异或,就会得到原始数据data。异或key的长度可以随意设置,使用的时候若data长度大于key长度,循环使用key即可(见下方代码)。

异或加密可以加密数据,但需要保存好key,秘钥管理较为麻烦。

而且如果让异或加密算法加密全为0的数组,就会暴露秘钥(异或的性质,与全0数据异或后得其本身)。

这里记录一下项目中使用异或加密出现的一个问题:含有中文的字符串,经过异或加密,再解密后会出现乱码。

贴一小段异或加密的代码

    public static byte[] xorEncode(byte[] data) {
        String key = "encryptKey";
        byte[] keyBytes = key.getBytes();
        byte[] encryptBytes = new byte[data.length];
        for (int i = 0; i < data.length; i++) {
            encryptBytes[i] = (byte) (data[i] ^ keyBytes[i % keyBytes.length]);
        }
        return encryptBytes;
    }

原因是中文字符转换为字节数据(byte)后,再经过异或,会变成无效的UTF-8编码,然后将异或后的字节数据转String获取到错误的字符串,之后再解密该错误的字符串,不能正确还原成原先的字符串。(引用自参考文档2)

解决该问题的方法有两个:

1. 使用char[]替代byte[],因为char是由两个byte组成的,可以表示一个汉字。

2. 字符串含有汉字时,先经过BASE64将汉字转换为字符,再异或加密。解密时同样先异或,再BASE64解析汉字。

四、DES和AES加密

DES和AES加密都属于对称加密算法,也就是他们加密和解密使用的秘钥是相同的。

1. DES加密

DES全称为Data Encryption Standard,即数据加密标准。是最早的加密算法,使用的时候将数据分为64位一组,最后一组不足64位可通过固定的方式补足,然后把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。

DES加密由于秘钥较短,在计算机计算能力提升以后,可以在一天左右的时间内暴力破解DES加密。为了防止这种情况的出现,出现了3DES加密技术。

2. 3DES加密

将DES加密算法以不同的秘钥加密3次,就是3DES加密。3个秘钥不同,则极大地提升了破解的难度。代价是运行时间和效率。

3. AES加密

AES全称Advanced Encryption Standard,是密码学中的高级加密标准,又称Rijndael加密法,Rijndael是由AES加密算法的两个发明人的名字合成的。

AES由DES发展而来,同样采用块加密的加密方式,但增大了块的大小至128bit。AES的的Key支持三种长度,分别是AES128,AES192,AES256。(这就是吃了DES64位秘钥被暴力破解的苦头,增加了秘钥长度,同时直接支持扩展秘钥)

AES相对于3DES提高了运行效率,同样难破解。

五、UUID

UUID 是 Universally Unique Identifier的缩写,名称是通用唯一识别码。是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。

UUID是一个128比特的数值,在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。

UUID具有多个版本:

1. 基于时间的UUID。通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。

2. DCE安全的UUID。DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

3. 基于名字的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

4. 随机UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的。

5. 基于名字的UUID(SHA1)

和基于名字的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

 

一个UUID的栗子:7cbcf75c-16cc-4536-bfb3-e5d8b210e888(这个UUID是由随机数得来)

当系统中需要机器的唯一标识时,可以使用UUID。

为什么讲UUID在加密部分提到呢,我觉得UUID是加密算法很好的素材和补充,加密解密的根本目的也是为了识别到指定的信息。

 

参考文档:

https://blog.csdn.net/qq_18870023/article/details/51969233

https://www.jianshu.com/p/cee17b67bb87

https://blog.csdn.net/qq_27570955/article/details/52442092

https://www.sohu.com/a/200488301_478315

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android常用的加密算法 的相关文章

随机推荐

  • 《市场调查与分析》:在校大学生对微信小程序的使用情况

    目录 一 研究背景和目的 1 1调查背景 1 2调查目的 二 调查内容 三 调查方式 四 调查对象及范围 五 抽样设计 六 调查问卷 七 调查分析 7 1问卷数据 7 2问卷信度效度分析 7 3调查基本情况 八 调查结论 8 1小程序的使用
  • 【Python基础】Python中读取图片的6种方式

    Python进行图片处理 第一步就是读取图片 这里给大家整理了6种图片的读取方式 并将读取的图片装换成numpy ndarray 格式 首先需要准备一张照片 假如你有女朋友的话 可以用女朋友的 没有的话 那还学啥Python 赶紧找对象去吧
  • html修改display属性的值,web开发设计--JS的innerHTML/display属性

    1 innerHTML 属性 innerHTML 属性用于获取或替换 HTML 元素的内容 语法 Object innerHTML 注意 1 Object是获取的元素对象 如通过document getElementById ID 获取的元
  • 获取多选下拉框(select标签设置multiple属性)的值

  • 给elasticsearch设置密码

    1 在elasticsearch yml中添加如下配置 xpack security enabled true xpack license self generated type basic xpack security transprt
  • Redis 缓存穿透、缓存击穿和缓存雪崩

    目录 Redis 缓存穿透 缓存击穿和缓存雪崩 Redis 缓存穿透 查不到 Redis缓存穿透的解决方案 方案一 接口校验 方案二 缓存空对象 方案三 布隆过滤器 Redis 缓存击穿 Redis 缓存击穿的解决方案 Redis 缓存雪崩
  • 数据库系统原理——ER模型与关系模型

    犹记得第一次看 数据库系统原理 时看天书的感觉 云里雾里 现在已经是第二次参阅这本书了 顿时有所感悟 哦 原来是这样 现在呢 开窍了一点 写下来且当作为笔记 ER模型 ER模型的基本元素是 实体 联系和属性 实体 是一个数据对象 指应用中可
  • 第19课 微信小程序安装使用mpvue脚手架

    第19课 微信小程序安装使用mpvue脚手架 详情地址 http mpvue com mpvue quickstart 安装前检查环境 安装脚手架之前需要电脑已安装node与npm 首先按住 shift 鼠标右键 按下 在此处打开命令行窗口
  • 关于Redis数据过期策略

    1 Redis中key的的过期时间 通过EXPIRE key seconds命令来设置数据的过期时间 返回1表明设置成功 返回0表明key不存在或者不能成功设置过期时间 在key上设置了过期时间后key将在指定的秒数后被自动删除 被指定了过
  • vsCode开发STM32设置头文件宏定义

    一 问题描述 使用 HAL 库新建 STM32 工程后 使用 vsCode 打开工程文件夹 会提示找不到头文件 以及比变量没有定义 如 uint32 t 不是一个有效类型等错误提示 如下图所示 二 原因分析 vsCode 中没有配置头文件路
  • 通过KXTF9-2050芯片分析I2C协议

    1 I2C协议 参见博客 I2C通信协议详解和通信流程分析 2 I2C驱动的框架分析 1 驱动框架分为两层 物理层和协议层 物理层是通用的 取决于主设备 协议层则每个从设备都不同 2 物理层 物理层可以理解成通用层 就是上面的介绍的I2C协
  • 嵌入式毕设分享 - stm32单片机酒精浓度酒驾检测系统 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 MQ 3酒精乙醇传感器模块 SIM800C模块 5 软件说明 系统框图 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕
  • 腾然教育MCN覃小龙公子:覃宣量2022年2岁10个月亲子照

    2022年8月3日 我和爱人 还有公子覃宣量 一同前往之前媳妇定好的拍摄店 叫做在红光桥下面的那个店 专门是儿童摄影的 在柳州做了好多年的 我们一家三口 一大早 就过去拍照了 下面这组我3岁啦 儿童摄影师非常有创意 直接让儿子每一个字拍一个
  • 【Random库】

    文章目录 random库概述 random库解析 random库概述 随机数在计算机应用中十分常见 Python内置的random库主要用于产生各种分布的伪随机数序列 random库采用梅森旋转算法 Mersenne twister 生成伪
  • 电脑出现msvcp120.dll丢失的解决方法,教你三招快速解决

    msvcp120 dll丢失是一件很常见的问题 出现msvcp120 dll丢失会导致电脑无法在正常运行 那么应该怎么解决这个问题呢 有什么办法可以快速的解决呢 今天教你三招快速解决msvcp120 dll丢失的方法 一 msvcp120
  • 时序预测

    时序预测 MATLAB实现CNN SVM卷积支持向量机时间序列预测 目录 时序预测 MATLAB实现CNN SVM卷积支持向量机时间序列预测 预测效果 基本介绍 研究回顾 程序设计 参考资料 预测效果 基本介绍 CNN SVM预测模型将深度
  • iphone投屏ipad_教你手机投屏电脑

    最近有很多小伙伴一直留言需要投屏软件 今天果子就来讲解一下关于投屏的问题 如果大家家里或者身边有类似天猫盒子这种的设备都是可以直接利用苹果自带的投屏服务AirPlay 屏幕镜像 进行投屏至电视 而我们的电脑分为USB投屏和无线投屏 WIN1
  • Android获取手机信号强度汇总

    雪里香梅 先报春来早 宋 欧阳修 蝶恋花 如今的天气是越来略冷了 每每走在凛冽的寒风中 心里就一个想法 春 假 天 期 怎么还不到 不知道大家有没有同感 前两天要做一个获取手机信号的小程序 于是在网上搜索了很多 就找到两种方法 遗憾的是都没
  • 【编译】gcc make cmake Makefile CMakeList.txt 关系、使用

    文章目录 一 关系 二 gcc 2 1 编译过程 2 2 编译参数 2 3 静态库和动态库 1 后缀名 2 联系与区别 2 4 GDB 调试器 1 常用命令 三 make makefile 四 cmake cmakelist 4 1 语法特
  • Android常用的加密算法

    一 MD5 MD5可以说是最基本最常用的加密算法了 还依稀记得在校招面试的时候被问到过 MD5信息摘要算法 MD5 Message Digest Algorithm 算法能将任意大小 格式的文字或文件进行加密从而产生 128 bit 16