-
结果始终都是24位,且最后两位都是等号==,请问这种加密算法是如何实现的?5
结果始终都是24位,且最后两位都是等号==,请问这种加密算法是如何实现的?比如:
把“1”加密得到:2lciyOzbzWGgc4XggfEwlg==
把“2lciyOzbzWGgc4XggfEw”加密得到:9pmPlgzttQuLvO3NHCRQpg==
请大虾们赐教,谢谢!2008年12月27日 16:16
3个答案 按时间排序 按投票排序
-
Base64 使用US-ASCII子集的64个字符,即大小写的26个英文字母,0-9,+,/。
编码总是基于3个字符,每个字符用8位二进制表示,因此一共24位,再分为4四组,每组6位,表示一个Base64的值。如下:
"A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f",
"g", "h", "i","j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"
Base64值为0就是A,为27的就是b。这样,每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符"="补齐Base64的4字。
举个例子说BASE64算法:
比如字符串 abcde
先取前三个字节abc
a b c
97 98 99
然后把它们的ascii码转换成二进制(1字节8位,不足8位在前面补0 )
01100001 01100010 01100011
然后对这组二进制数据重新分组,每组6位
011000 010110 001001 100011
再分别把这四组二进制转换成十进制数据
24 22 9 35
然后在
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这里边对照一下
0对第1个,1对第2个依此类推
24就对第25个Y
22对第23个W
9对第10个J
35对第36个j
加密后的密文就是YWJj
对于abcde剩下的后面两个字节"de"
这是不足3字节的情况
先把它转换了
ascii码是
100 101
转成二进制是
01100100 01100101
再分成6位一组的小组
重新分组
011001 000110 0101
最后一组不足6位,在后面补0。
011001 000110 010100
转10进制
25 6 20
然后在
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这里边对照
结果是ZGU
前面说过:每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符"="补齐Base64的4字。
最后de经过编码的结果就是ZGU=
abcde经过编码的结果就是YwJjZGU=
这是编码过程,解码和编码是相反的一个过程,这里就不多说了。
识别是不是Base64编码其实挺简单的,Base64编码结果是由26个小写字母加26个大写字母加数字和+/这两个符号组成的,稍微观察一下挺容易看出来的。2009年1月07日 15:09
-
有==是 BASE64得到的
24位是根据128位的HASH算法得到的。 至于用了什么hash算法, 我也无法知道。 肯定不是M5。 你需要了解下, 你是如何得到这个值的。 你明明知道结果, 应该程序里能让你测试得到的。 他不是一个加密算法, 是一个数字摘要算法。2008年12月27日 20:03
相关推荐
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与...
这种编码方式将每3个字节(24位)的数据转换为4个6位的Base64字符,每个字符在Base64字符集中有64种可能的值,因此得名Base64。Base64字符集包括大小写字母、数字以及"+"和"/",并且通常在末尾用一个或两个等号("=")...
根据提供的文件信息,我们可以深入探讨Base64加密算法在Java中的实现原理以及具体的代码细节。 ### Base64加密算法概述 Base64是一种基于64个可打印字符来表示二进制数据的方法。它通常用于将二进制数据转换为文本...
本文将详细介绍四种常见的加密算法——BASE64、MD5、SHA以及HMAC,并提供相应的Java实现示例。 #### 二、BASE64 **BASE64** 是一种编码格式,而不是加密算法。它的主要作用是将二进制数据转换为文本格式以便在网络...
根据提供的信息,我们可以深入探讨QQ加密的逆算法编写这一主题,特别是聚焦于Base64解码的实现方式。下面将详细介绍这段代码所涉及的关键概念、原理以及其实现细节。 ### 1. Base64解码的基本原理 Base64是一种...
Base64编码将每3个8位字节的数据块(24位)转换为4个6位字节的数据块(24位),并用64个字符集中的字符表示这4个6位字节。当原始数据不是3的倍数时,会在末尾添加额外的填充位,通常是一个等号('=')。 在Java中,...
Base64将每3个字节的数据转换为4个6位的“Base64字符”,最后用等号(=)填充以保持编码字符串长度的整数倍。解码时,这些字符会被还原为原始的二进制数据。 数字签名是一种用于验证信息完整性和发送者身份的技术。...
Base64的原理是将每3个8位字节(24位)的数据转换成4个6位字节(24位)的数据,并在每个6位字节前添加两个等号("=")作为填充,以确保编码后的字符串长度是4的倍数。在编码过程中,Base64使用了一个64字符的字符集...
3. 拆分:将连续的6位块组合成24位的二进制数据,按照每3字节一组。 4. 去填充:根据末尾的"="数量,去除相应数量的0字节。 在DLL实例中,这些操作会被封装在函数中,供其他程序调用。开发者可以使用这些函数对...
为了确保所有数据都能正确表示,最后可能会添加一个或两个等号('=')作为填充。 在JSP中,我们通常使用Java的标准库来实现Base64操作。Java 8引入了`java.util.Base64`类,提供了方便的API用于Base64编码和解码。...
Base64的原理是将每3个字节(24位)的数据转换为4个6位的十六进制数,然后用64个可能的字符来表示这6位的数值,这些字符包括大小写字母、数字和两个特殊符号`+`和`/`,最后一位如果是不足6位的,会在末尾添加等号(`=...
最后,如果原始数据不是3的倍数,会在结果字符串末尾添加一个或两个等号(=)作为填充,以确保输出的长度是4的倍数。 描述中的"Bases64内容加密"可能是指使用Base64对某些敏感信息进行了编码,以防止非预期的查看。...
如果你需要保护数据的安全性,应使用更复杂的加密算法,如AES(高级加密标准)或RSA。Base64通常用于在传输层提供数据的完整性,而不是保密性。例如,在HTTPS通信中,TLS/SSL协议首先对数据进行加密,然后再使用Base...
例如,最后一个组只有2个有效位,则添加两个等号;如果只有一个有效位,就添加三个等号。 3. **JavaScript中的实现**:在JavaScript中,可以使用内置的`btoa()`函数对字符串进行Base64编码,而`atob()`函数用于解码...
Base64使用64个字符(包括大小写字母、数字和两个特殊符号+和/)来表示二进制数据的每6位。因为二进制数据通常不是6的倍数,所以Base64编码会在末尾添加1或2个等号(=)作为填充,以确保编码后的字符串长度是6的倍数...
如果原始数据不是3的倍数,那么最后一组Base64字符可能只需要1到3位,这时会用等号('=')填充,表示填充位。 在实际应用中,Base64加密常用于保护敏感数据,如密码、API密钥或证书,因为未经解码的Base64字符串对...
当输入的数据长度不是3的倍数时,会在末尾添加0位来补足,最后可能还会加上1或2个等号(`=`)作为填充,表示原始数据的位数。 在Java中,实现Base64编解码主要依赖于`java.util.Base64`类,这个类从Java 8开始被...
Base64编码的原理是将每3个8位字节(24位)的数据转换为4个6位的数字(每个6位数字对应ASCII码表中的一个字符),然后在每个6位数字前补足两个零,形成一个8位的字符。因为24位可以表示的最大数字是2^24-1,而6位...
- 解密:Base64编码的字符串通过查表还原成对应的6位二进制数,再组合成原始的24位二进制数据,最后按照字节顺序恢复为原始的二进制数据。 3. 使用Base64工具 "Base64 加密解密小工具"是一个实用程序,可以帮助用户...