md5base64 是什么,md5 base64使用场景, base64优势,Android 使用md5

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: md5base64 是什么,md5 base64使用场景, base64优势,Android 使用md5

md5 在线测试工具:md5在线解密破解,md5解密加密

MD5 Message-Digest Algorithm  信息消化算法),一种被广泛使用的密码散列函数


md5 base64使用场景:



md5 用户密码存储 文件校验


base64 公开的代码图片文件加密  url加密


MD5:是一种不可逆的摘要算法,用于生成摘要,无法逆破解到原文。常用的是生成32位摘要,用于验证数据的有效性。比如,在网络请求接口中,通过将所有的参数生成摘要,客户端和服务端采用同样的规则生成摘要,这样可以防止篡改。又如,下载文件时,通过生成文件的摘要,用于验证文件是否损坏。校验使用


Base64:属于加密算法,是可逆的,经过encode后,可以将decode得到原文。在开发中,有的公司上传图片(指纹)采用的是将图片转换成Base64字符串,再上传。在做加密相关的功能时,通常会将数据进行Base64加密/解密。


base64优势:



数据传输稳定


我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。


对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。


那么Base64到底是怎样编码的呢?


简单来说,任何一个数据无非可以看作一个比特流,如01000100010011101100111010111100011001010......那么我们取6个比特为一组,计算它的ascii值,得到一个字符,这个字符肯定是可见字符,好,把它对应的字符写出来,再取6个比特,计算...,如此下去,直到最后,就完成了编码。


1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;


2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);


3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;


4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;


MD5值有几个特点:



1、它是一段固定长度的数据,即128bit的由“0”和“1”组成的一段二进制数据。无论原始数据是多长或多短,其MD5值都是128bit。


2、通常(或者叫行业规定),这段128bit的数据,按4bit一组分成32组,每一组按16进制来计算其值,并以字符的形式输出每个值。比如一组数据按16进制计算出来的值是0-9,打印出来也是0-9,如果计算出来的值是a-f,如果直接打印的话将会是10-15,在java中可以使用String.format("%02x", bytes[i])方法来将16进制的 a-f 打印成字母“a-f”,最终这个128bit的数据将会被打印成一个32位的字符串。所以我们通常所说的MD5值就是指这串32位的由“0-9,a-f”所组成的字符串。如果你看到某个MD5不是32位,或发现其中含有“0~f”之外的字符,那肯定是个错误的MD5值。


3、确定性,一个原始数据的MD5值是唯一的,同一个原始数据不可能会计算出多个不同的MD5值。(唯一性)


4、碰撞性,原始数据与其MD5值并不是一一对应的,有可能多个原始数据计算出来的MD5值是一样的,这就是碰撞。(不可逆) 因此可以校验文件是否损坏;


5、不可逆。也就是说如果告诉你一个MD5值,你是无法通过它还原出它的原始数据的,这不是你的技术不够牛,这是由它的算法所决定的。因为根据第4点,一个给定的MD5值是可能对应多个原始数据的,并且理论上讲是可以对应无限多个原始数据,所有无法确定到底是由哪个原始数据产生的。


Base64


实质是 一种编码格式,如同UTF-8

是一种用64个字符来表示任意二进制数据的方法


可逆性。


可以将图片等二进制文件转换为文本文件。

可以把非ASCII字符的数据转换成ASCII字符,避免不可见字符。


MD5


实质是一种散列表的计算方式

不可逆性。

任意长度的明文字符串,加密后得到的密文字符串是长度固定的。


Android 使用md5 ,base64



base64:


String encodedString = Base64.encodeToString("1".getBytes(), Base64.NO_PADDING);
        Log.e("Base64", "Base64---->" + encodedString);
        String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));
        Log.e("Base64", "Base64---->" + decodedString);

MD5:


public String md5Decode32(String content) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("NoSuchAlgorithmException",e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UnsupportedEncodingException", e);
        }
        //对生成的16字节数组进行补零操作
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10){
                hex.append("0");
            }
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }

目录
相关文章
|
6月前
|
机器学习/深度学习 搜索推荐 安全
探索安卓系统的新功能与优势
当谈及移动操作系统时,安卓系统一直被广大用户熟知。然而,随着技术的不断发展,安卓系统也在不断更新和改进。本文将探索最新的安卓系统功能和优势,让读者了解其创新之处。
|
5月前
|
安全 Java Android开发
Android 与 iOS:探索两大操作系统的差异与优势
本文将深入探讨安卓和iOS这两大主流移动操作系统的差异与优势。我们将分别从用户界面、应用生态系统、开发者支持以及性能与安全方面进行比较,帮助读者更好地了解并选择适合自己的操作系统。
103 0
|
4月前
|
安全 Java Android开发
探索安卓应用开发中的Kotlin语言优势
【7月更文挑战第8天】 在安卓开发的广阔天地中,Kotlin以其优雅的语法、现代化的特性和高效的性能成为了开发者的新宠。本文将深入探讨Kotlin在安卓应用开发中所展现的独特魅力,从语言特性到实际应用案例,揭示其如何简化代码编写、提升开发效率,并增强应用性能。通过对比分析,我们将一同见证Kotlin如何在众多编程语言中脱颖而出,成为安卓开发领域的一股清新之风。
245 11
|
4月前
|
Java Android开发 iOS开发
探索iOS与安卓在移动应用开发中的差异及优势
在数字时代的浪潮下,移动应用开发成为技术前沿的重要领域。本文旨在深入分析iOS与安卓这两大主流操作系统在移动应用开发过程中的显著差异及各自的独特优势。通过对比两者的开发环境、工具、语言和用户群体等方面,揭示它们如何塑造开发者的选择并影响最终的应用产品。我们不仅关注技术层面的区别,也着眼于市场动态和用户体验的不同需求,以期为开发者提供全面而实用的视角。
|
5月前
|
安全 Java Android开发
探索Android与iOS开发平台的差异与优势
【6月更文挑战第7天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星般熠熠生辉。本文将深入探讨这两个系统在开发环境、用户界面设计、市场策略及安全性方面的不同之处,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众选择最合适的平台。
|
6月前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第29天】 随着移动开发技术的不断进步,开发者寻求更高效、更简洁的方式来编写代码。在Android平台上,Kotlin语言凭借其现代化的特性和对协程的原生支持,成为提高开发效率的关键。本文将深入分析Kotlin协程的核心优势,并通过实例展示如何在Android应用开发中有效地利用协程来处理异步任务,优化性能,以及提升用户体验。通过对比传统线程和回调机制,我们将揭示协程如何简化异步编程模型,并减少内存消耗,使应用更加健壮和可维护。
|
6月前
|
移动开发 调度 Android开发
构建高效Android应用:探究Kotlin协程的优势
【5月更文挑战第28天】在移动开发领域,性能优化和资源管理是持续的挑战。为了应对这些挑战,Android开发者转向了多种解决方案,其中Kotlin协程作为一种新兴的异步编程范式,正逐渐受到关注。本文将深入探讨Kotlin协程如何改善Android应用的性能、提高代码可读性以及简化异步逻辑,同时通过实例演示其在实际应用中的实现方式。
|
6月前
|
移动开发 安全 编译器
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在移动开发领域,性能优化和流畅的用户体验始终是开发者追求的目标。随着Android对Kotlin的支持日益增强,Kotlin协程作为一种新的并发处理方式,为Android应用的性能提升提供了新的可能性。本文将深入探讨Kotlin协程的核心优势,并通过具体实例展示如何在Android应用中有效利用协程来提升响应速度、减少内存消耗,并简化异步代码。
|
6月前
|
存储 缓存 算法
深入理解操作系统内存管理:分页系统的优势与挑战构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在现代计算机系统中,内存管理是操作系统的核心功能之一。分页系统作为一种内存管理技术,通过将物理内存划分为固定大小的单元——页面,为每个运行的程序提供独立的虚拟地址空间。这种机制不仅提高了内存的使用效率,还为多任务环境提供了必要的隔离性。然而,分页系统的实现也带来了一系列的挑战,包括页面置换算法的选择、内存抖动问题以及TLB(Translation Lookaside Buffer)的管理等。本文旨在探讨分页系统的原理、优势及其面临的挑战,并通过分析现有解决方案,提出可能的改进措施。
|
6月前
|
数据库 Android开发 UED
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在面对移动应用开发时,性能优化和异步处理是提升用户体验的关键。Android平台上,Kotlin语言凭借其简洁性和功能性成为开发的首选之一。特别是Kotlin协程的引入,为开发者提供了一种更加简洁、高效的方式来处理并发和后台任务。本文将深入探讨Kotlin协程的核心原理,展示其在Android开发中的应用优势,并通过实例代码演示如何在实际项目中有效利用协程来改善应用性能和响应速度。