最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)可逆簡單的加密算法

 更新時間:2019年03月22日 08:20:31   作者:丟你劉某  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)可逆簡單的加密算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近想把word密碼文件的服務(wù)器密碼信息歸檔到mysql數(shù)據(jù)庫,心想著如果直接在里面寫明文密碼會不會不安全,如果用sha這些不可逆的算法又沒法還原回來,所以自己就想著用Python寫一個小代碼,先把明文密碼加密之后再存mysql表中。下面貼出我的Python代碼:

首先是加密encript.py

# coding:utf-8
def encrpt(s):
 length = len(s)
 j = ""
 for i in s:
  if ord(i) <= 49:
   i = chr(ord(i) + length)
   j = j + i
  elif ord(i) > 81 and ord(i) <= 126:
   i = chr(ord(i) - length)
   j = j + i
  else:
   j = j + chr(32) + i
 return j
 
 
s = raw_input("請輸入6到16位的密碼:")
enscript_s = ""
if len(s) < 6 or len(s)>16:
 print ("密碼長度不符合")
if len(s) == 0:
 print ("密碼不能為空")
for i in s:
 if ord(i) < 33 and ord(i) > 126:
  print ("非法字符")
 
if len(s) >= 6 and len(s) <= 16:
 enscript_s = encrpt(s)
 print enscript_s

注意,我這里限定了加密6到16位密碼,下面說說我的思路:

首先,輸入6到16位密碼,然后判斷這些密碼符不符合規(guī)定的字符,當(dāng)然我認(rèn)為這里我的判定還不夠完善,ord函數(shù)獲取每一個字符對應(yīng)的十進(jìn)制ASCII碼。大家可以翻看ASCII碼表,ASCII碼十進(jìn)制33到126,包含了大小寫字母,數(shù)字和特殊標(biāo)點(diǎn)等內(nèi)容,我認(rèn)為密碼字符就是應(yīng)該在這些范圍內(nèi)的,然后我執(zhí)行了encrpt(s)函數(shù),這里的詳細(xì)說下這個函數(shù),加密的原理就是密碼中的字符這里假定ASCII碼小于等于49的將該字符和字符長度相加作為新的字符密碼的ASCII碼,然后調(diào)用chr函數(shù)將這個新的ASCII碼轉(zhuǎn)換成字符格式,大家可以對照著ASCII碼表設(shè)。而下面的ASCII碼大于81,少于126的范圍是跟上面的49相關(guān)的,因?yàn)樽畲笫?6位長度,如果49+16那么這個值就是65,而33(上面說明了輸入的密碼應(yīng)該包含大小寫字母,數(shù)字和特殊標(biāo)點(diǎn)等內(nèi)容,這個范圍是從ASCII為33,也就是感嘆號的開始)+6=39,也就是小于等于49的字符轉(zhuǎn)換的范圍是39~65;另一方面,對于ASCII碼范圍在81~126的,我們將其減去密碼長度作為新的字符密碼,那么同理81-16=65,126-6=120,也就是新的字符密碼的ASCII碼范圍剛好在66~120之間,這個就保證和加密后的字符一定不會和上面條件為49的加密的字符的ASCII碼重復(fù);另外,這里對于49~80這里的字符段我所做的處理是直接按照原來的字符,并且在字符的左手邊插入了一個空格字符,就是 j = j + chr(32) + i這句話實(shí)現(xiàn)的,這個空格字符作為我們沒有處理的字符的標(biāo)記,后面解密會用到。

下面是解密代碼,decript.py

# coding:utf-8
def decrpt(s):
 length1 = len(s)
 length2 = len(s.replace(" ", ""))
 j = ""
 for i in range(length1):
  if s[i] is None:
   continue
  if ord(s[i-1]) == 32: 
   j = j + s[i]
   continue
  elif ord(s[i]) >= 33 and ord(s[i]) <= 65:
   j = j + chr(ord(s[i]) - length2)
   continue
  elif ord(s[i]) > 65 and ord(s[i]) <= 126:
   j = j + chr(ord(s[i]) + length2)
   continue
 return j
 
s = raw_input("請輸入6到16位的密碼:") 
descript_s = ""
if len(s) < 6 or len(s)>32:
 print ("密碼長度不符合")
if len(s) == 0:
 print ("密碼不能為空")
for i in s:
 if ord(i) < 1 and ord(i) > 127:
  print ("非法字符")
if len(s) >= 6 and len(s) <= 32:
 descript_s = decrpt(s)
 print descript_s

可以看到len(s) >= 6 and len(s) <= 32,我這里限定了字符的長度可以到32位,是因?yàn)閯偛偶用芸赡軙a(chǎn)生空格標(biāo)記字符,這樣長度就會超過限定的16位密碼字符了,然后我們關(guān)注decrpt這個函數(shù),里面我獲取了兩個長度length1和length2,length1是密文(包括加密時插入的空格字符標(biāo)記),length2是原來明文的實(shí)際長度(只要將加密時的空格字符標(biāo)記去掉就可以算出來),然后下面的解密條件也是和加密的條件一一對應(yīng)的,重點(diǎn)說下

if ord(s[i-1]) == 32: 
            j =  j + s[i]
            continue

這個,這里我們剛才加密插入的空格字符標(biāo)記就有用了,剛才加密的時候如果是沒有處理的明文密碼是會在字符左邊插入空格字符的(ASCII碼32),然后在讀到這個沒有處理的字符時,我們檢查前一個字符是否是空格字符,如果是證明這個字符沒有經(jīng)過加密,所以也不用解密了。這里為什么要插入這個空格字符呢,這里假定我們有一個明文字符對應(yīng)的ASCII碼是70(字符F),那么根據(jù)剛才加密的條件,ASCII碼在49到80之間是不會加密的,還是按照原來的字符,但是我們解密的時候,條件規(guī)定了ASCIII碼在33與74之間是要減去密碼長度的,這樣就沒法得出正確的字符了,這里可能有疑問,為什么加密的時候設(shè)定條件中ASCII碼49-80之間是斷開的,解密的時候怎么33~74和74~126連續(xù)起來了,這里是因?yàn)榧用軙r候ASCII碼是49~80這一段的確沒有處理,但是一旦加上字符的長度,解密范圍就會變大,例如加一個最大長度的字符49+16=65,解密的時候就要在65的范圍內(nèi),所以范圍就增大了。

最后附上測試圖:

加密

解密

測試后我們就可以把" Gpan8lY7;-"這個加密后的字符串粘貼到mysql表中,注意,粘貼的時候別漏了G字母左邊是有個空格標(biāo)記的,表示G這個字符沒有被加密。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)

    Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)

    這篇文章主要介紹了Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù),代碼實(shí)現(xiàn)了計(jì)算列表中元素的最小公倍數(shù)的功能,包括公式介紹,需要的朋友可以參考一下
    2021-11-11
  • Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫表中的數(shù)據(jù)導(dǎo)出生成csv格式文件的方法

    Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫表中的數(shù)據(jù)導(dǎo)出生成csv格式文件的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫表中的數(shù)據(jù)導(dǎo)出生成csv格式文件的方法,涉及Python針對mysql數(shù)據(jù)庫的連接、查詢、csv格式數(shù)據(jù)文件的生成等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 詳解opencv中畫圓circle函數(shù)和橢圓ellipse函數(shù)

    詳解opencv中畫圓circle函數(shù)和橢圓ellipse函數(shù)

    這篇文章主要介紹了opencv中畫圓circle函數(shù)和橢圓ellipse函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python使用turtle庫與random庫繪制雪花

    python使用turtle庫與random庫繪制雪花

    這篇文章主要為大家詳細(xì)介紹了python使用turtle庫與random庫繪制雪花,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python使用BeautifulSoup與正則表達(dá)式爬取時光網(wǎng)不同地區(qū)top100電影并對比

    python使用BeautifulSoup與正則表達(dá)式爬取時光網(wǎng)不同地區(qū)top100電影并對比

    這篇文章主要給大家介紹了關(guān)于python使用BeautifulSoup與正則表達(dá)式爬取時光網(wǎng)不同地區(qū)top100電影并對比的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的全過程

    python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的全過程

    最近項(xiàng)目中采用了前后端分離的技術(shù),感覺有必要給大家總結(jié)下,所以下面這篇文章主要給大家介紹了關(guān)于python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 使用Python制作簡單的小程序IP查看器功能

    使用Python制作簡單的小程序IP查看器功能

    這篇文章主要介紹了利用Python制作簡單的小程序IP查看器功能,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • python生成器用法實(shí)例詳解

    python生成器用法實(shí)例詳解

    這篇文章主要介紹了python生成器用法,結(jié)合實(shí)例形式詳細(xì)分析了Python生成器相關(guān)原理、創(chuàng)建、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Python基于回溯法子集樹模板解決野人與傳教士問題示例

    Python基于回溯法子集樹模板解決野人與傳教士問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決野人與傳教士問題,簡單說明了野人與傳教士問題,并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決野人與傳教士問題的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python Pandas對缺失值的處理方法

    Python Pandas對缺失值的處理方法

    這篇文章主要給大家介紹了關(guān)于Python Pandas對缺失值的處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python Pandas具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

呼伦贝尔市| 淮阳县| 丘北县| 河西区| 布尔津县| 铜山县| 永州市| 左权县| 家居| 新干县| 阿图什市| 合江县| 武乡县| 托克逊县| 大理市| 朔州市| 那曲县| 疏勒县| 乾安县| 镶黄旗| 洛阳市| 南宁市| 和顺县| 绥江县| 海兴县| 盐边县| 定襄县| 昌黎县| 米易县| 湾仔区| 和林格尔县| 广河县| 普宁市| 唐海县| 岢岚县| 河北省| 达孜县| 永吉县| 旬邑县| 简阳市| 沈丘县|