网站首页 > 技术文章 正文
“我的数据经过了base64加密,不用担心输出乱码的问题。”
“我的密码是经过MD5加密存储的。”
工作这么多年经常碰到有人这样说,一开始我还煞有介事地去纠正,后来听多了好像也就习惯了。把编码、哈希、混淆、加密算法统统叫加密算法,这是一个普遍现象,不只是新手,老鸟也未必能分清楚这些算法的区别,当然也可能是叫着叫着就习惯了吧。
最近在头条上看到不少技术文章还在犯这种错误,作为有点强迫症倾向的我,今天就再多嘴一次,希望搜索引擎上类似的关键字会越来越少吧(其实最主要的是要多涨粉):
什么是编码算法?
简单地说,编码算法是对二进制数据的一个呈现方式,是为了能让人类更好识别枯燥的二进制数据,以及让计算机能理解人类抽象的文字而制定的一套二进制与字符之间的转换规则。(注:这里的编码特指数据编码,而非图片、音视频等编码算法。)
常见的编码有ASCII、Unicode、UTF8、URL编码、HTML编码及Base64等,这些都是以不同形式表示二进制数据的算法,比如Base64算法把3个字节共24bit分成长度为6bit的四段,并以“a-zA-Z0-9+/”共64个ASCII字符以及作为补全字符的“=”表示。
什么哈希算法
哈希算法也称摘要算法,是指把可变长度的数据通过运算得到固定长度散列值的不可逆算法,只要原始数据稍微改动得到的散列值机会完全不同,因为这个特性,哈希算法通常应用于对数据的完整性校验以及密码验证。
常见的哈希算法有MD5、SHA1、SHA256、SHA512、NTLM等。
什么是加密
加密算法是使用密码对可读的原始数据进行处理并得到不可读密文的算法,跟哈希算法不同的是,加密算法是完全可逆的,只要提供密码及密文就可以通过解密获得明文。
加密算法又分成对称加密算法及非对称加密算法,二者主要的区别在于如何使用密钥上,对称加密算法使用同一个密码进行加解密,常见的有DES、3DES、AES等,主要应用于体积较大的数据加密。
而非对称加密算法使用公钥及私钥对进行加解密,使用公钥加密的密文只能通过私钥解密,反过来使用私钥加密的密文则只能通过公钥解密,非对称加密的运算成本很高,因此一般只用于身份验证及密码交换,常见的算法有RSA、DSA、DH等。
以上是对编码、哈希、对称加密及非对称加密等算法的简单介绍,为什么不能把这些算法都称为加密算法呢?新手该如何区分这些算法?
首先可以从是否可逆上进行区分,编码、对称加密及非对称加密算法都是可逆的,而哈希算法不可逆。
其次看是否使用了密码,编码及哈希算法不使用密码,对称加密使用一个密码,而非对称加密使用两个密码。
因此 ,判断一个算法是否是加密算法要看它有没有加解密机制,如果Base64是加密算法那它的密码是什么?如果MD5是加密算法那我们能通过密码还原密文吗?
所以,把数据转化成Base64格式我们应该称为Base64编码,而使用MD5、SHA等算法获取数据摘要值的过程我们应该称为哈希而不是加密。
对密码破解技术感兴趣的同学可以加关注,我后续将会持续更新这方面的内容,谢谢!
猜你喜欢
- 2024-10-12 百度 面试题——Redis的对象类型与内部编码
- 2024-10-12 五分钟带你了解哈希算法究竟是什么!
- 2024-10-12 Redis哈希类型的使用场景 redis哈希槽的概念
- 2024-10-12 Redis哈希类型使用命令 redis 哈希操作
- 2024-10-12 对象存储服务器Minio(超详细) 对象存储服务适于哪些场景
- 2024-10-12 基于Vision Transformer的视频哈希检索识别虚假视频
- 2024-10-12 Java高级面试之哈希表 哈希表java实现
- 2024-10-12 Redis 选择hash还是string 存储数据?
- 2024-10-12 特征工程:基于梯度提升模型的特征编码效果测试
- 2024-10-12 Redis 讲解系列之 Redis的五大数据类型和配置文件解读
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)