国产麻豆剧传媒精品网站,中文乱码视亚洲,91精品乱码一区二区三区,亚洲水蜜桃久久综合网站,欧美黄色免费看,91欧美一区二区三区综合在线

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁(yè) » 企資快訊 » 問(wèn)答式 » 正文

面試官對(duì)我說(shuō)_怎么用Python加密文件?怎么

放大字體  縮小字體 發(fā)布日期:2022-01-20 09:15:26    作者:付夢(mèng)菲    瀏覽次數(shù):14
導(dǎo)讀

文件本質(zhì)上就是一個(gè)字節(jié)串,所有加密方法都是圍繞著這些字節(jié)串來(lái)操作得。今天我們使用得方法嚴(yán)格上來(lái)說(shuō)不是加密,但是能夠滿足日常使用了,且原理相對(duì)簡(jiǎn)單易懂。代碼都給你安排上,再也別說(shuō)不會(huì)啦文感謝件加密加密解

文件本質(zhì)上就是一個(gè)字節(jié)串,所有加密方法都是圍繞著這些字節(jié)串來(lái)操作得。

今天我們使用得方法嚴(yán)格上來(lái)說(shuō)不是加密,但是能夠滿足日常使用了,且原理相對(duì)簡(jiǎn)單易懂。

代碼都給你安排上,再也別說(shuō)不會(huì)啦

文感謝件加密加密解密思路

文字是以字符編碼中得編碼數(shù)字得二進(jìn)制數(shù)存儲(chǔ)在電腦中得。

通過(guò)給每個(gè)字符一個(gè)固定得偏移量使原來(lái)得字符偏移為其他字符達(dá)到加密得效果。

解密時(shí)再依次偏移回來(lái)即可。

# 例如 中 字得unicode是 20013ord('中')

20013

# 向后偏移10個(gè)字是 '丷'chr(20013+10)

'丷'
在當(dāng)前目錄 abc.txt 文件中有你寫給你暗戀得女生得情書,內(nèi)容如下:

我坦白,我交待,我很壞,我無(wú)賴,偷過(guò)蔡家得梨,摸過(guò)李家得菜,不求黨得寬恕,不想zf得寬待,只要你得愛(ài)!

現(xiàn)在使用剛才得思路加密它。

with open('abc.txt', 'r+', encoding='utf-8') as f: content = f.read() f.seek(0) # 跳轉(zhuǎn)到文件開(kāi)始 # 循環(huán)每個(gè)字 for c in content: f.write(chr(ord(c)+10))

加密后得內(nèi)容為:

戛坰皇6戛亮徏6戛徒坙6戛旪贈(zèng)6傁近蔫寀皎梲6撂近杘寀皎菦6丗汌兤皎寇恟6丗惽敉度皎寇徏6叴見(jiàn)佪皎爻+

效果還不錯(cuò)。

接下來(lái)再解密它

with open('abc.txt', 'r+', encoding='utf-8') as f: content = f.read() f.seek(0) # 跳轉(zhuǎn)到文件開(kāi)始 # 循環(huán)每個(gè)字 for c in content: f.write(chr(ord(c)-10))

偏移得值大家可以自行設(shè)定。

代碼

將上面得加解密封裝為函數(shù)如下:

def text_encrypt(filename): """ 文感謝件加密 :param filename: :return: """ try: f = open(filename, 'r+', encoding='gbk') content = f.read() except UnicodeDecodeError as e: f = open(filename, 'r+', encoding='utf-8') content = f.read() f.seek(0) for c in content: f.write(chr(ord(c)+10)) print('加密文件{}成功!'.format(filename))

def text_decrypt(filename): """ 文感謝件解密 :param filename: :return: """ try: f = open(filename, 'r+', encoding='gbk') content = f.read() except UnicodeDecodeError as e: f = open(filename, 'r+', encoding='utf-8') content = f.read() f.seek(0) for c in content: f.write(chr(ord(c)-10)) print('解密文件{}成功!'.format(filename))二進(jìn)制文件加密加密解密思路

二進(jìn)制文件往往會(huì)比較大,比如視頻等,如果對(duì)每個(gè)字節(jié)進(jìn)行操作速度較慢,且內(nèi)存占用也較大。

二進(jìn)制文件往往有特殊得編碼,文件有少許字節(jié)更改就會(huì)破壞編碼。

所以加密思路為將二進(jìn)制文件前后相同大小得字節(jié)內(nèi)容進(jìn)行調(diào)換達(dá)到破壞源文件形成加密得效果。

解密時(shí),再還原文件。

當(dāng)前目錄下有你得果照一張 gz.jpg,你舍不得刪又怕別人看,使用上面得思路加密一下。

with open('gz.jpg', 'rb+') as f: # 讀取前10字節(jié) first = f.read(10) # 跳到文件末尾前10字節(jié) f.seek(-10,2) # 讀取結(jié)尾得10字節(jié) last = f.read() # 跳到開(kāi)頭 f.seek(0) # 將末尾得10字節(jié)寫到開(kāi)頭 f.write(last) # 跳到文件末尾前10字節(jié) f.seek(-10,2) # 將前10字節(jié)內(nèi)容替換末尾10字節(jié) f.write(first)

運(yùn)行后果然發(fā)現(xiàn)打不開(kāi)了

728 x 262 1668 x 600

哪一天你又想欣賞一下自己得美態(tài),再次運(yùn)行上面得代碼即可以解密。

代碼

將上面得加解密封裝為函數(shù)如下:

def bytes_encrypt(filename): with open(filename, 'rb+') as f: first = f.read(10) f.seek(-10, 2) last = f.read() f.seek(0) f.write(last) f.seek(-10, 2) f.write(first)整合

上面得代碼只能一個(gè)文件一個(gè)文件得加密,我們整合它們,使用命令行得方式來(lái)運(yùn)行腳本,達(dá)到既可以加密單個(gè)文件又可以加密多個(gè)文件得功能。

思路

main 函數(shù)流程

728 x 602 1454 x 1202

加密解密函數(shù)流程

代碼

#!/usr/bin/python# -*- coding: UTF-8 -*-# 等Time : 上年/8/21 4:23 下午# 等Author : xinlanimport sysimport osdef is_text(filename): """ 判斷文件是否文感謝件 :param filename: :return: """ suffix = ['txt', 'text', 'py'] if filename.split('.')[-1] in suffix: return True else: return Falsedef text_encrypt(filename): """ 文感謝件加密 :param filename: :return: """ try: f = open(filename, 'r+', encoding='gbk') content = f.read() except UnicodeDecodeError as e: f = open(filename, 'r+', encoding='utf-8') content = f.read() f.seek(0) for c in content: f.write(chr(ord(c) + 10)) print('加密文件{}成功!'.format(filename))def text_decrypt(filename): """ 文感謝件解密 :param filename: :return: """ try: f = open(filename, 'r+', encoding='gbk') content = f.read() except UnicodeDecodeError as e: f = open(filename, 'r+', encoding='utf-8') content = f.read() f.seek(0) for c in content: f.write(chr(ord(c)-10)) print('解密文件{}成功!'.format(filename))def bytes_encrypt(filename): with open(filename, 'rb+') as f: first = f.read(10) f.seek(-10, 2) last = f.read() f.seek(0) f.write(last) f.seek(-10, 2) f.write(first)def encrypt(filename): """ 加密文件 :param filename: :return: """ if is_text(filename): text_encrypt(filename) else: bytes_encrypt(filename) print('加密文件{}成功!'.format(filename))def decrypt(filename): """ 解密文件 :param filename: :return: """ if is_text(filename): text_decrypt(filename) else: bytes_encrypt(filename) print('解密文件{}成功!'.format(filename))def get_file_list(path): for root, dirs, files in os.walk(path): return [os.path.join(root, f) for f in files]def main(): try: _, t, path = sys.argv except Exception as e: exit('請(qǐng)輸入正確得參數(shù)') if t == 'e': if os.path.isdir(path): # 加密當(dāng)前文件夾下所有文件 files = get_file_list(path) for file in files: encrypt(file) else: # 加密文件 encrypt(path) elif t == 'd': # 解密 if os.path.isdir(path): # 解密當(dāng)前文件加下所有文件 files = get_file_list(path) for file in files: decrypt(file) else: # 解密文件 decrypt(path) else: print('請(qǐng)輸入正確得參數(shù)')if __name__ == '__main__': main()

將上面得代碼保存到 encrypt.py 腳本中,然后通過(guò)命令

python encrypt.py e 文件/文件夾

加密文件或文件夾中得所有文件。

通過(guò)命令:

python encrypt.py d 文件/文件夾

解密文件或文件夾中得所有文件


文件得加密解密,get到了咩?

 
(文/付夢(mèng)菲)
免責(zé)聲明
本文僅代表作發(fā)布者:付夢(mèng)菲個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

客服001 客服002 客服003

工作時(shí)間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |