Python实现简单的可逆加密程序实例
作者:Sephiroth 发布时间:2022-12-18 10:39:56
标签:Python,加密
本文实例讲述了Python实现简单的可逆加密程序。分享给大家供大家参考。具体如下:
Python代码如下:
#coding=utf-8
'''''
Description: 可逆的加密与解密
Environment: python2.5.x
Author:idehong@gmail.com
'''
import os
import sys
class Code(object):
'''''可逆的加密与解密'''
def __init__(self, key = "idehong@gmail.com"):
self.__src_key = key
self.__key = self.__get_strascii(self.__src_key, True)
def encode(self, value):
'''''加密函数, 加密后为一串数字'''
return "%d" % (self.__get_strascii(value, True) ^ self.__key)
def decode(self, pwd):
'''''解密函数'''
if self.is_number(pwd):
return self.__get_strascii( (int(pwd)) ^ self.__key, False )
else:
print 'require number.'
def reset_key(self, key):
'''''重新设置key'''
self.__src_key = key
self.__key = self.__get_strascii(self.__src_key, True)
#===============================================================================
# 内部调用接口
#===============================================================================
def __get_strascii(self, value, bFlag):
if bFlag:
return self.__get_str2ascii(value)
else:
return self.__get_ascii2str(value)
def __get_str2ascii(self, value):
ls = []
for i in value:
ls.append( self.__get_char2ascii( i ) )
return long("".join(ls))
def __get_char2ascii(self, char):
'''''获取单个字符的acsii码值'''
try:
return "%03.d" % ord(char)
except (TypeError, ValueError):
print "key error."
exit(1)
def __get_ascii2char(self, ascii):
if self.is_ascii_range(ascii):
return chr(ascii)
else:
print "ascii error(%d)" % ascii
exit(1)
def __get_ascii2str(self, n_chars):
ls = []
s = "%s" % n_chars
n, p = divmod(len(s), 3)
if p > 0:
nRet = int(s[0 : p])
ls.append( self.__get_ascii2char(nRet))
pTmp = p
while pTmp < len(s):
ls.append( self.__get_ascii2char( int(s[pTmp: pTmp + 3])) )
pTmp += 3
return "".join(ls)
#================================================================================
# 工具接口
#================================================================================
def is_number(self, value):
try:
int(value)
return True
except (TypeError, ValueError):
pass
return False
def is_ascii_range(self, n):
return 0 <= n < 256
def is_custom_ascii_range(self, n):
return 33 <= n <48 or 58 <= n < 126
class Usage(object):
'''''
命令行参数读取与解析
'''
def __init__(self):
self._clsWork = Code()
self._args_dic = {'arg_help' : ['-?', '-help'],
'arg_p' : ['-p', '-pwd'],
'arg_t' : ['-t', '-text'],
'arg_k' : ['-k', '-key'],
}
def help(self, *k):
strHelp = "Usage: pwd [-options] [args...] where option include:"
strHelp += """
-? -help print this help message
-k <key_str> -p <pwd_str>
-k <key_str> -t <text_str>"""
print strHelp
def args(self, argv_ls):
'''''dispatch command'''
# print argv_ls
if len(argv_ls) <= 1 or len(argv_ls) > 5:
print 'Unrecognized option'
return
cmd_dic = {}
curr_cmd = ''
# control command
for i, v in enumerate(argv_ls[1:]):
for j in self._args_dic.items():
# add command
if v in j[1] and j[0] not in cmd_dic:
curr_cmd = j[0]
cmd_dic[curr_cmd] = []
break
else:
# add argv
if cmd_dic:
cmd_dic[curr_cmd].append(v)
# exec command
if cmd_dic:
self.exec_cmd(cmd_dic)
else:
print 'Unrecognized option'
def exec_cmd(self, cmd_dic):
'''''exec cmd'''
if len(cmd_dic) == 2:
if 'arg_p' in cmd_dic and 'arg_k' in cmd_dic\
and len(cmd_dic['arg_p']) == 1 and len(cmd_dic['arg_k']) == 1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
print self._clsWork.encode(cmd_dic['arg_p'][0])
return
elif 'arg_t' in cmd_dic and 'arg_k' in cmd_dic\
and len(cmd_dic['arg_t']) == 1 and len(cmd_dic['arg_k']) == 1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
print self._clsWork.decode(cmd_dic['arg_t'][0])
return
self.help()
if __name__ == '__main__':
usage = Usage()
usage.args(sys.argv)
希望本文所述对大家的Python程序设计有所帮助。


猜你喜欢
- 前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有
- 又有人说设session.timeout=99999。这种同样不行,session有最大时间限制。我经过测试发现最大值为24小时,也就是说你
- 采用最小二乘的求逆方法在大部分情况下是低效率的。特别地,当局镇非常大时效率更低。另外一种实现方法是矩阵分解,此方法使用tensorflow内
- 本文实例讲述了Python实现的计数排序算法。分享给大家供大家参考,具体如下:计数排序是一种非常快捷的稳定性强的排序方法,时间复杂度O(n+
- 一、框架菜单1.1 common模块1.2 其他二、Excel接口测试案例编写三、读取Excel测试封装(核心封装)excel_utils.
- 0.object类源码class object: """ The most base type &
- Base64编码的深入认识与理解 之前在很多业务中都有见过或者用到过Base64编码,但一直一知半解,没有对它有一个深入的认识和
- 使用go mod之后,想要在goland中有代码提示,有两种方式,一种是使用gopath下的goimport工具,另一种是使用gomod自身
- 对于中小型个人、企业网站来说,MySQL数据库或许是目前数据库的最完美实施解决方案了。在不变更服务器硬件的前提下,一个经过良好架构,优化后的
- 环境准备:1.安装python3.7和相关的依赖并安装redis缓存数据库pip install aliyun-python-sdk-cor
- 我们知道在国内使用 Docker,无论是 Pull、Build 还是 Push 镜像都十分慢,因为毕竟很多源都是国外的源,下载和上传慢是必然
- python对函数库的引用方式1、import <库名> 例如:import turtle 如果需要使用库函数中的函数,需要使用
- 1.列表list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样py
- 原图代码 src = cv2.imread("28.png") gray_src = cv2.c
- 1.删除原有的mariadb,不然mysql装不进去mariadb-libs-5.5.52-1.el7.x86_64rpm -qa|grep
- 我使用的 Pandas 版本如下,顺便也导入 Pandas 库。>>> import pandas as pd>&g
- 一:js支持 Unicode 字符集,所以可以用中文命名函数。 二:js 在Var中没有初始化的变量,默认为undefined 三:对于未声
- 前言大家好,今天很开心有机会跟大家分享最近几年阿里在低代码领域的思考和实战。我是力皓,目前已经在前端和后端岗位工作了十多年了,近 3 年专注
- 迷宫生成1.随机PRIM思路:先让迷宫中全都是墙,不断从列表(最初只含有一个启始单元格)中选取一个单元格标记为通路,将其周围(上下左右)未访
- 值得庆幸的是,我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组: var args = Array.prot