首页 > 其他分享 >使用base64编码加密解密

使用base64编码加密解密

时间:2023-02-01 16:56:11浏览次数:37  
标签:tmp Base64 加密 base64 解密 len char

Base64编码简介

Base64这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚。它实际上是一种“二进制到文本”的编码方法,它能够将给定的任意二进制数据转换(映射)为ASCII字符串的形式,以便在只支持文本的环境中也能够顺利地传输二进制数据。例如支持MIME的电子邮件应用,或需要在XML中存储复杂数据(例如图片)时。

要实现Base64,首先需要选取适当的64个字符组成字符集。一条通用的原则是从某种常用字符集中选取64个可打印字符,这样就能避免在传输过程中丢失数据(不可打印字符在传输过程中可能会被当做特殊字符处理,从而导致丢失)。例如,MIME的Base64实现选用了大写字母、小写字母和0~9的数字作为前62个字符。其他实现通常会沿用MIME的这种方式,而仅仅在最后2个字符上有所不同,例如UTF-7编码。

我们经常会在Base64编码字符串中看到最后有"="字符,这就是通过填充生成的。填充就是当出现编码时的情况2和3时,在后面补上"="字符,使编码后的字符数为4的倍数。

下面这段文本:

Man is distinguished, not only by his reason, but by this singular passion from other
animals, which is a lust of the mind, that by a perseverance of delight in the continued and
indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

通过MIME Base64进行转换后就成为:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dC
BieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGlja
CBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZ
GVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb
24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55
IGNhcm5hbCBwbGVhc3VyZS4=

  1. 开发Base64的目的就不是为了加密,而是为了方便在文本环境中传输二进制数据

  2. 所以,与开发一个加密算法不同,安全性并不是Base64的目标,只是它的一个副产物。

实际上,Base64的安全性是非常差的,这就是在实际应用中不用它加密的原因。如果你对常用加密方法有所了解的话,你应该知道有一种古老的加密方法,称为“字符替换法”。即指定一个规则,将每个字符用其他字符替换,例如将a变为c、b变为d等,这样替换后生成的结果就是密文。解密时只需要反过来操作,将c变为a、将d变为b就可以了。用不同的替换规则加密,生成的密文也不同。

用Base64来加密实际上就相当于字符替换,只不过它先对字节做了一些变换,然后再进行替换,对加密过程来说,本质上是一样的。

字符替换法 虽然简单,但却是一个伟大的发明,它被使用了超过1千年,一直都没有有效的方法来破解它。后来人们终于发现了它的弱点:基于词频和字母频率的统计规律,就能够轻松得到它的密钥。从那以后,加密者与解密者之间的战争从来就没有停歇过,加密者不断发明更复杂更安全的加密算法,解密者则绞尽脑汁去破解它们。
喽。

代码区:

主要思想:
将信息的每一个字母抓换为ascii码,并且将所有的ascii码连接起来,补上不足的0,使得长度能被6整除,将他们以6的间距分开,将之转化为array中的字母,加上=号(是0数量的1/2)

加密与解密是相对的

使用同一数组array

array=[
        '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方式加密
'''
def encrypt_base64():
    src=input("加密字符串:")
    tmp = ""
    result=""
    eqcount=0
    for char in src:
        char = ord(char) #turn to the ascii
        char = bin(char) #turn to the bin(二进制)
        char = char.replace("0b","")
        if(len(char) != 8):
            char = (8-len(char))*"0"+char
        tmp = tmp + char
    if(len(tmp)%6!= 0):
        eqcount = 6 - len(tmp)%6
        tmp = tmp + (6-len(tmp)%6)*"0"
    for i in range(0,len(tmp),6):
        base64bin=tmp[i:i+6]
        base64bin=int(base64bin,2)
        result=result + array[base64bin]
    result = result + int(eqcount/2)*"="
    return result

运行结果

解密:

#-------------------------------------
'''
使用base64方式解密
'''
def decrypt_base64():
    src=input("解密字符串")
    eqcount = 0
    for i in src:
        if(i == "="):
            eqcount=eqcount+1
    src = src.replace("=",'')
    tmp = ""
    result = ""
    for char in src:
        for i in range(len(array)):
            if(array[i] == char):
                tmpbin=bin(i).replace("0b","")
                if(len(tmpbin) !=6):
                    tmpbin = (6-len(tmpbin))*"0" + tmpbin
                tmp = tmp + tmpbin

标签:tmp,Base64,加密,base64,解密,len,char
From: https://www.cnblogs.com/tuzichun/p/17079150.html

相关文章

  • 2325.decode the message 解密消息
    问题描述2325.解密消息解题思路利用数组作为哈希表,记录每个字母是第几个出现的代码classSolution{public:stringdecodeMessage(stringkey,stringmessage)......
  • 手机号加密
    /***中间加密字符串截取法*/functionencryptTel1($tel1){$new_tel=substr($tel,0,3).'****'.substr($tel,7);return$new_tel;}/***中间......
  • 网络安全学习之加解密相关知识
    常见编码方式 ASCII、ANSI、GBK、GB2312、UTF-8、GB18030和UNICODE Base64:是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示......
  • .net 对接极兔平台 java Base64与.net Base64数据不一致及POST 带header 和body 参数
    近几天对接极兔平台,遇到javaBase64与.netBase64数据不一致及POST带header和body参数的问题,费了一些周折,现在记录下来,供大家参考。1. javaBase64与.netBase64数据......
  • 【加密与解密】第六章②
    BlowFish算法这是一个64位分组及可变秘钥长度的分组密码算法,非专利。1.算法原理给予feistal网络(替换/置换网络的典型代表),加密函数迭代执行16轮。分组长度为64位。秘钥长......
  • 【加密与解密】第六章①
    现有的系列号加密算法大都是软件开发者自行设计的,大部分都相当简单。此外还有很多成熟的算法可以使用,例如密码学中一些强度比较高的算法。单向散列算法单向散列算法也称h......
  • 谷歌邮箱无法显示使用 Base64 处理的图片的解决方法
    前言有时候图片会使用Base64编码来处理,然后再传到前端img标签的src属性里展示,这里记录遇到的一个问题,就是使用谷歌邮箱来打开图片,使用了Base64编码处理的图片是展......
  • 加密你的DNS
    为什么要加密你的DNS?因为传统DNS查询数据以明文方式传输,存在暴露的风险,采用加密DNS可以有效地防止隐私泄露和DNS劫持。隐私泄露:传统DNS请求数据易被其他人获取,从而泄......
  • 【加密与解密】第五章②
    前面几天过年去了,直接他妈摆了小半个月,要死,最近继续之前的进度。警告窗口Nag的意思是烦人。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。去除Nag窗口常用......
  • 易灵思钛金系列加密方案
     易灵思钛金系列加密方案(qq.com)......