Base64、MD5加解密及应用

一、Base64编码:把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换,编码表的大小为2^6=64,这也是Base64名称的由来。

 


 

二、Base64编码步骤

1)将所有字符转化为ASCII码

2)将ASCII码转化为8位二进制

3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位

4)统一在6位二进制前补两个0凑足8位

5)将补0后的二进制转为十进制

6)从Base64编码表获取十进制对应的Base64编码

 

三、转换举例

1)zyq


 

2)mzwu


 
为什么不会出现3个‘=’号呢,一个‘=’号代表一个空的占位符,而3个字符刚好转成4个Base64字符,呵呵。
 

四、Base64编码应用

1)图片大部分都是可以转换成Base64编码,直接使用。一般用来处理不大的图片,别的文件格式也可以,过大的base64其实意义不大了。

<img src="https://img-blog.csdnimg.cn/2022010704134678467.gif" /> 

   
 

 2)将canvas保存时非常有用,参考http://www.nihilogic.dk/labs/canvas2image/,修改MIME头可以用于保存文件,如修改为image/octet-stream

var strDataURI = oCanvas.toDataURL();  
// returns "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt..."  

 

 

学习某位大神猜解加密串的文章,这里做个记录,http://bbs.blackbap.org/thread-3973-1-1.html。。。

----------------------------------------------------

GCV15/bVem29Cu9CiBpP+w
GCV15/bVem29Cu9CiBpP+w
E5Ia47UWnXs19vyWWsjKbg
Q3GN6LRsX/ba1eJUEQqLeA
Dhvt8khDDmpERqXcsUhtWQ

以E5Ia47UWnXs19vyWWsjKbg为例,可能这么看看不出什么效果,那我们换个姿势看:E5Ia47UWnXs19vyWWsjKbg==,不过有人会问,长的像又不表示这就是base64。

走个流程熟悉一下,先按照Base64的加密方式反向解密,得到二进制,如果按照ascii码来转,则很多事无意义的字符,那么按照十六进制转换来看看

00010011        13
10010010        92
00011010        1A
11100011        E3
10110101        B5
00010110        16
10011101        9D
01111011        7B
00110101        35
11110110        F6
11111100        FC
10010110        96
01011010        5A
11001000        C8
11001010        CA
01101110        6E

得到:13921AE3B5169D7B35F6FC965AC8CA6E,看着眼熟吧,就是MD5加密后的结果,MD5解密的网站有很多,一般都可以破解,但有些密码破解需要收费的。

 

#########################################################

 

一、MD5:Message-Digest Algorithm 5(消息摘要算法第五版)的简称,是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一(又译哈希算法、摘要算法等),主流编程语言普遍已有MD5的实现。将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。虽然已被破解,但仍然具有较好的安全性,加之可以免费使用,所以仍广泛运用于数字签名、文件完整性验证以及口令加密等领域。

 

二、32位与16位MD5加密的区别:16位加密就是从32位MD5散列中把中间16位提取出来!其实破解16位MD5散列要比破解32位MD5散列还慢因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比而破解32位的则不需要,加密后直接对比就可以了。

字符串:abc
MD5(16位):3CD24FB0D6963F7D
MD5(32位):900150983CD24FB0D6963F7D28E17F72

 --------------------------------------

Base64加解密,http://base64.xpcha.com/

MD5加密,http://tool.chinaz.com/Tools/MD5.aspx

MD5解密,http://www.cmd5.com/

-----------------------------------------

ASCII码对照表



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个功能强大的跨平台应用开发框架,支持多种加密算法,包括AES加密算法。在Qt中实现AES/ECB/PKCS5Padding加密解密需要以下步骤: 1. 导入相关的库文件。在Qt中,可以通过调用`#include <QCryptographicHash>`和`#include <QByteArray>`来导入相关的库文件。 2. 选择合适的AES模式。在这个例子中,我们选择了ECB模式,这是一种简单的模式,适用于数据块相互独立的情况。同时,我们要确保使用PKCS5Padding填充方式。 3. 编写加密函数。在加密函数中,我们需要提供待加密的数据和密钥。具体实现可以参考以下代码: ```cpp QString encrypt(QString data, QString key) { QByteArray rawData = data.toUtf8(); QByteArray rawKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5); // 创建AES加密对象 AESCrypt aes(rawKey, AESCrypt::ECB, AESCrypt::PKCS5Padding); // 加密数据 QByteArray encryptedData = aes.encrypt(rawData); // 返回加密后的数据 return QString(encryptedData.toBase64()); } ``` 4. 编写解密函数。在解密函数中,我们同样需要提供待解密的数据和密钥。具体实现可以参考以下代码: ```cpp QString decrypt(QString data, QString key) { QByteArray encryptedData = QByteArray::fromBase64(data.toUtf8()); QByteArray rawKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5); // 创建AES解密对象 AESCrypt aes(rawKey, AESCrypt::ECB, AESCrypt::PKCS5Padding); // 解密数据 QByteArray decryptedData = aes.decrypt(encryptedData); // 返回解密后的数据 return QString(decryptedData); } ``` 以上是用Qt实现AES/ECB/PKCS5Padding加密解密的简单示例。根据具体的需求,你可能需要进一步完善这些函数和添加错误处理等功能。此外,需要注意的是,加密算法涉及数据安全,建议在生产环境中使用经过专业验证的加密方式,并采取其他的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值