python加密程序_Python 简单的可逆加密程序

简单加密

1.[代码][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 -p

-k -t """

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse中tomcat服务器locations不能修改,解决eclipse中Tomcat服务器的server location选项不能修改的问题...

解决eclipse中Tomcat服务器的server location选项不能修改的问题问题描述编辑tomcat服务器时&#xff0c;server locations无法编辑&#xff0c;如下图&#xff1a;解决方法在Eclipse菜单栏中选择window — show view — server 可以看到服务的面板&#xff0c;服务面板中可看到…

当create table as select 遇上大数据

统计24小时的红包感知专题&#xff0c;有1.5亿行以上的数据&#xff0c;Nokia给出的方法是先按小时执行算法&#xff0c;再汇总各个小时的执行结果。 算法中包含了大量的 sum(case when)计算。 专题里有5个小节&#xff0c;执行计划的时候&#xff0c;需要跑5次where条件不同…

mybatis源码分析(方法调用过程)

十一月月底&#xff0c;宿舍楼失火啦&#xff0c;搞得20多天没有网&#xff0c;目测直到放假也不会来了。。。 正题 嗯~&#xff0c;其实阅读源码不是为了应付面试&#xff0c;更重要的让你知道&#xff0c;大师是怎样去写代码的&#xff0c;同样是用Java&#xff0c;为啥Clint…

提取多个字段_动态合并多个工作表,数据再多也不怕

小伙伴们好啊&#xff0c;今天老祝和大家分享一个动态合并多个工作表的技巧。很多时候&#xff0c;咱们的数据是按照部门或是月份等项目&#xff0c;分别存放在不同工作表中的&#xff0c;要对这些数据进行分析汇总的时候&#xff0c;需要先将不同工作表中的数据合并到一起才可…

深入理解Oracle的并行操作【好文认真读】

请尊重原文作者&#xff0c;http://czmmiao.iteye.com/blog/1487568 -------------------------------------------------------------------------------- 并行&#xff08;Parallel&#xff09;和OLAP系统 并行的实现机制是&#xff1a;首先&#xff0c;Oracle会创建一个进…

服务器虚拟化性能瓶颈怎么办,如何突破虚拟化三大瓶颈

如果你希望在应用虚拟化技术的过程中不出现任何问题的话&#xff0c;那么显然这是不切合实际的期望。虚拟化技术能给你的数据中心带来诸多好处&#xff0c;但是为了可以利用虚拟化的优势&#xff0c;你需要了解可能会面对哪些问题。即使虚拟化技术已经被应用到了许多企业中&…

2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结 对“第三章 程序机器级表示”的深入学习 我选择这章的理由是第一次学的时候还是不太理解&#xff0c;老师也有说这章建议在认真学习&#xff0c;所以本周的学习任务是认真再次学习这一章c语言、汇编代码以及机器…

python中为什么推荐使用with_Python中的with关键字使用详解

这篇文章主要介绍了Python 中的with关键字使用详解的相关资料,在Python中,with关键字是一个替你管理实现上下文协议对象的好东西,需要的朋友可以参考下">在 Python 2.5 中&#xff0c; with 关键字被加入。它将常用的 try ... except ... finally ... 模式很方便的被复…

create table as select性能测试

转载自&#xff1a;http://blog.csdn.net/yangzhijun_cau/article/details/7396088 --------------------------------------------------------------------------------- 原表270W数据&#xff0c;无照片&#xff0c;字段比较多&#xff0c;有50个左右 测试机是一个虚拟机&a…

类似索引Model套Model之 iOS模型闲聊二

看下界面, 这是类似于索引的页面, 只不过木有右侧索引条的布局. 如果想了解通讯录索引的,请移步iOS - 高仿通讯录之商品索引排序搜索. 提供思路如下: 分析界面及接口用 MVC 设计模式来实现(其实核心点都在下面5)创建内外层 Model 并绑定两者 Model两者 Cell 布局的实现 (便于后…

输入法画面_搜狗输入法:用AI技术谱写诗意生活

十九世纪著名的思想家斯宾塞曾说&#xff1a;科学本身就富有诗意。这里应该包含两种意思&#xff0c;字面上&#xff0c;科学是饱含文字之美的&#xff0c;比如原理和规律的推演&#xff0c;仅通过文字符号的简单排列&#xff0c;便有了生机。但深层次上科学又不止于文字&#…

hadoop伪分布式(单机版)安装,Linux

一、下载 1、hadoop官网下载&#xff1a;https://archive.apache.org/dist/hadoop/common/ 进入stable文件夹里下载&#xff0c;这是稳定版本。 stable/ 本文的版本是 hadoop-2.7.2.tar.gz 2、jdk下载&#xff0c;JDK7及以上&#xff0c;本文用jdk8-64位 二、版本区别 2.…

c++-add two numbers 两个链表相加

题目描述 You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) (5 -> 6…

城轨的两类时钟系统均同步于_基于两台SDS3000示波器同步产生“8通道”示波器...

在很多应用场合需要4通道以上的示波器&#xff0c;但是市面上极大部分示波器最多只有四通道&#xff0c;而且没有外部输入的同步时钟接口。 有什么快捷的方法获得更多通道功能的示波器&#xff1f; 最简便的方法是:将两台示波器的辅助输入信号作为触发源&#xff0c;同时连接到…

Linux设置ssh免密码登录

一、SSH来源 对于需要远程管理其它机器&#xff0c;一般使用远程桌面或者telnet。linux一般只能是telnet。但是telnet的缺点是通信不加密&#xff0c;存在不安全因素&#xff0c;只适合内网访问。 为解决这个问题&#xff0c;推出了通信加密通信协议&#xff0c;即SSH&#x…

解析json数据_Retrofit同时解析JSON和XML数据格式

前言Android开发中&#xff0c;我们会经常遇到前端需要解析两种数据格式(json和xml),比如自己服务器返回的是json格式的数据&#xff0c;我们做微信登录的时候&#xff0c;微信返回的格式又是xml格式的。我们可以通过自己编写Retrofit的ConverterFactory来做到可以同时解析两种…

ORACLE 小时值必须介于1和12之间 解决方法

ORACLE数据库查询语句&#xff1a; "select * from dual where time>to_date(2012-10-29 19:45:34,yyyy-mm-dd HH:mi:ss)"当执行时&#xff0c;会抛出错误&#xff1a;ORA-01849: 小时值必须介于 1 和 12 之间 01849. 00000 - "hour must be between 1 and 1…

jenkins+svn+maven+ssh 部署配置详细记录

2019独角兽企业重金招聘Python工程师标准>>> 先简单记录一下&#xff0c;后面再慢慢完善。 1、环境 jdk 1.7.0_45 maven 3.1.1 jenkins 2.3.21 jdk和maven的安装就不必多说了&#xff0c;主要是jenkins的安装需要说下&#xff0c;jenkins有war包和yum还有rpm等安装方…

k8s安装sqlite3_kubernetes环境部署单节点redis数据库的方法

kubernetes部署redis数据库(单节点)redis简介Redis 是我们常用的非关系型数据库&#xff0c;在项目开发、测试、部署到生成环境时&#xff0c;经常需要部署一套 Redis 来对数据进行缓存。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 Redis 数据库&#xff0…

oracle 都是parallel惹的祸【1-2分钟出结果变1-2秒】

原文&#xff1a;http://blog.csdn.net/shushugood/article/details/9000628 -------------------------------------------------------- 该项目是中国联通xxxx话务系统&#xff0c;我的架构设计需求设计&#xff0c;运维保障数据库开发&#xff0c;全套服务。 在今天开发完毕…