本文主要是介绍30余种加密编码类型的密文特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MD5、sha1、HMAC算法、NTLM等相似加密类型
1、MD5——示例21232F297A57A5A743894A0E4A801FC3
一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,如图。如果出现这个范围以外的字符说明这可能是个错误的md5值,就没必要再拿去解密了。16位值是取的是8~24位。
md5的三个特征:
- 确定性:一个原始数据的MD5值是唯一的,同一个原始数据不可能会计算出多个不同的MD5值。
- 碰撞性:原始数据与其MD5值并不是一一对应的,有可能多个原始数据计算出来的MD5值是一样的,这就是碰撞。
- 不可逆:也就是说如果告诉你一个MD5值,你是无法通过它还原出它的原始数据的,这不是你的技术不够牛,这是由它的算法所决定的。因为根据第4点,一个给定的MD5值是可能对应多个原始数据的,并且理论上讲是可以对应无限多个原始数据,所有无法确定到底是由哪个原始数据产生的。
2、sha1——示例d033e22ae348aeb5660fc2140aec35850c4da997
这种加密的密文特征跟MD5差不多,只不过位数是40
3、HMAC算法——示例5b696ae7da9442ead7adc24d03cedb65
HMAC (Hash-based Message Authentication Code) 常用于接口签名验证,这种算法就是在前两种加密的基础上引入了秘钥,而秘钥又只有传输双方才知道,所以基本上是破解不了的
3、NTLM——示例209c6174da490caeb422f3fa5a7ae634
Base64、Base58、Base32、Base16、Base85、Base100等相似加密类型
1、Base64——示例YWRtaW4tcm9vdA==
一般情况下密文尾部都会有两个等号,明文很少的时候则没有
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’,如图。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
Base64使用注意问题
一、Base64和URL传参问题
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充’='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
二、Base64和URL传参问题改善
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
三、Base64转换后比原有的字符串长1/3
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
四、Base64转换总结
Base64转换,最好是不要用在加密上,尤其是参数加密,很容易出问题。
2、Base58——示例6tmHCZvhgfNjQu
它最大的特点是没有等号
Base58是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。
相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。
比特币的Base58字母表:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
简单的说:Base58一种编码方式,跟十进制,十六进制一样,不过更短更省空间。
Base58的原理是什么?
二进制:0和1
十进制:1到10
十六进制:十进制的基础上加上了A-F 六个字母
Base58可以理解为一种58进制。
Base58包含了阿拉伯数字、小写英文字母,大写英文字母。
但是去掉了一些容易混淆的数字和字母:0(数字0)、O(o的大写字母)、l( L的小写字母)、I(i的大写字母)
3、Base32——示例GEZDGNBVGY3TQOJQGE======
他的特点是明文超过十个后面就会有很多等号
Base32使用了ASCII编码中可打印的32个字符(大写字母AZ和数字27)对任意字节数据进行编码.Base32将串起来的二进制数据按照5个二进制位分为一组,由于传输数据的单位是字节(即8个二进制位).所以分割之前的二进制位数是40的倍数(40是5和8的最小公倍数).如果不足40位,则在编码后数据补充"=",一个"="相当于一个组(5个二进制位),编码后的数据是原先的8/5倍.
Base32编码表
这篇关于30余种加密编码类型的密文特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!