python实现base64算法加密
python本身有base64加密的模块,不过是用C写的,封装成了.so文件,无法查看源码,本着学习的心态,自己实现了一遍,算法
原理参考 浅谈Base64编码算法.
代码如下:
- # coding:utf8
- import string
- import base64
- # 编码用64位数组 因为是转换为6个字节的字符 所以64位就够了
- letters = list(string.letters) + list(string.digits) + ['+', '/']
- def my_base64_encodestring(input_str):
- # 对每一个字节取ascii数值或unicode数值,然后转换为2进制
- str_ascii_list = ['{:0>8}'.format(str(bin(ord(i))).replace('0b', ''))
- for i in input_str]
- output_str = ''
- # 不够3的整数倍 补齐所需要的次数
- equal_num = 0
- while str_ascii_list:
- temp_list = str_ascii_list[:3]
- if len(temp_list) != 3:
- while len(temp_list) < 3:
- equal_num += 1
- temp_list += [''*8]
- temp_str = ''.join(temp_list)
- # 三个8字节的二进制 转换为4个6字节的二进制
- temp_str_list = [temp_str[x:x+6] for x in [0, 6, 12, 18]]
- # 二进制转为10进制
- temp_str_list = [int(x, 2) for x in temp_str_list]
- # 判断是否为补齐的字符 做相应的处理
- if equal_num:
- temp_str_list = temp_str_list[0:4-equal_num]
- output_str += ''.join([letters[x] for x in temp_str_list])
- str_ascii_list = str_ascii_list[3:]
- output_str = output_str + '=' * equal_num
- #print(output_str)
- return output_str
- def my_base64_decodestring(input_str):
- # 对每一个字节取索引,然后转换为2进制
- str_ascii_list = ['{:0>6}'.format(str(bin(letters.index(i))).replace('0b', ''))
- for i in input_str if i != '=']
- output_str = ''
- equal_num = input_str.count('=')
- while str_ascii_list:
- temp_list = str_ascii_list[:4]
- temp_str = ''.join(temp_list)
- # 补够8位
- if len(temp_str) % 8 != 0:
- temp_str = temp_str[0:-1*equal_num*2]
- # 4个6字节的二进制 转换 为三个8字节的二进制
- temp_str_list = [temp_str[x:x+8] for x in [0, 8, 16]]
- # 二进制转为10进制
- temp_str_list = [int(x, 2) for x in temp_str_list if x]
- output_str += ''.join([chr(x) for x in temp_str_list])
- str_ascii_list = str_ascii_list[4:]
- #print(output_str)
- return output_str
- if __name__ == "__main__":
- input_str = '11我'
- input_str = 'MTHmiJE='
- #my_base64_encodestring(input_str)
- my_base64_decodestring(input_str)
- pass
如有疏漏之处还请指正
python实现base64算法加密的更多相关文章
- MD5加密、时间戳转换、base64算法加密、解密
#region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...
- hash模块 hashlib不可逆加密 和 base64算法加密解密
hashlib模块 用于加密相关的操作,代替md5模块和sha模块,主要提供SHA1,SHA224,SSHA256,SHA384,SHA512,MD5算法 直接看代码案例: ---------md5- ...
- c# base64算法解密
/// <summary> /// 将字符串使用base64算法加密 /// </summary> /// <param name="code_type&quo ...
- java Base64算法的使用
Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息.详见 Base64介绍 1 自定义的base64算法 Base64Encrypt.java public c ...
- python AES 双向对称加密解密
高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- Base64算法
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/4288372.html ...
- [DEncrypt] MySecurity--安全加密/Base64/文件加密 (转载)
点击下载 MySecurity.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.MySecurity 加密字符串2.MySecurity 加密字符串 密钥为系统默认 012345678 ...
- C#与Java互通AES算法加密解密
/// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...
- MD5加密算法(信息摘要算法)、Base64算法
1 什么是MD5 信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的 应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少:因 ...
随机推荐
- kafka相关资料
先来说一下Kafka与RabbitMQ的对比: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. kafka是Linkedin于20 ...
- Hibernate hql 多表查询
String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.use ...
- Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~ 呵呵... 看着有点晕.. 再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在 ...
- springmvc框架的搭建
1引入jar包 jar包下载地址http://maven.springframework.org/release/org/ 以下是我引入的jar包 aopalliance-1.0.jaraspectj ...
- scala -- 递归 实现 斐波那契函数
求一个起始为0,1,1,2,3的斐波那契序列 def main(args: Array[String]): Unit = { def fib(n: Int): Int = { if (n == 1) ...
- threading实例
import paramiko, threading import queue import pymysql class ThreadPool(object): def __init__(self, ...
- str和repr的区别(转)
Python打印值的时候会保持该值在python代码中的状态,不是用户所希望看到的状态.而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态. 例如: >>> ...
- console.log等不能打印全部数据/信息
有时候console.log在chrome调试控制台打印不全,如下: 这个时候,我们可以点击进去:用watch 工具,添加变量,右击copy value 选项:
- Python的logging,记录log的包
最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式 一.python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网 ...
- 奇偶数判断2(if else+switch语句)
public class 奇偶数判断2 { public static void main(String [] agrs){ float s = 17f; //定义浮点型数据s float h = s ...