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.pswp.cn/news/539759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539759.shtml
英文地址,請注明出處:http://en.pswp.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;全套服務。 在今天開發完畢…