电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python加密word文檔詳解

瀏覽:2日期:2022-08-06 15:08:30
目錄Python加密word文檔總結(jié)Python加密word文檔

我們先了解一下異或是什么。簡(jiǎn)單來說,如果a、b兩個(gè)值不相同,則異或結(jié)果為1。如果a、b兩個(gè)值相同,異或結(jié)果為0。我們簡(jiǎn)單的梳理一下代碼思路。代碼分為兩部分,加密和解密。

1.加密

把文件轉(zhuǎn)換成二進(jìn)制的格式,然后生成等長(zhǎng)的隨機(jī)密鑰進(jìn)行異或操作,得到加密后的二進(jìn)制文件。這一步我們需要保留的數(shù)據(jù)有,加密后的文件和隨機(jī)生成的密鑰,當(dāng)然他們都是一些二進(jìn)制數(shù)。

2.解密

這一步就簡(jiǎn)單了,我們把加密后的文件和之前隨機(jī)生成的密鑰再進(jìn)行一次異或操作,即可得到原本的二進(jìn)制數(shù),然后我們?cè)侔阉D(zhuǎn)換成文本即可。

OK,思路大致明了了,我們需要兩個(gè)程序,加密程序接收str參數(shù) ,運(yùn)行完成會(huì)輸出加密后的二進(jìn)制word文檔,和用于解密的二進(jìn)制密鑰。解密程序則需要接收兩個(gè)int參數(shù),分別為加密程序輸出的兩個(gè)二進(jìn)制內(nèi)容,異或之后輸出原始文本。那么,上代碼。

加密代碼:

from secrets import token_bytesfrom docx import Documentimport docximport time​def random_key(length): # token_bytes,函數(shù)接受一個(gè)int參數(shù),用于指定隨機(jī)字節(jié)串的長(zhǎng)度。 # int.from_bytes把字節(jié)串轉(zhuǎn)換為int,也就是我們需要的二進(jìn)制數(shù) key = token_bytes(nbytes=length) key_int = int.from_bytes(key, ’big’) return key_int​def encrypt(raw): raw_bytes = raw.encode() #參數(shù)big意為正序,little則輸出反序。 raw_int = int.from_bytes(raw_bytes, ’big’) key_int = random_key(len(raw_bytes)) return raw_int ^ key_int, key_int​def decrypt(encrypted, key_int): decrypted = encrypted ^ key_int length = (decrypted.bit_length() + 7) // 8 decrypted_bytes = int.to_bytes(decrypted, length, ’big’) return decrypted_bytes.decode()​def encrypt_file(path, key_path=None,): document = Document(path) all_paragraphs = document.paragraphs file = docx.Document() file2 = docx.Document()​ jkl = input(’請(qǐng)輸入希望保存的文件名:’) + ’.docx’​ for paragraph in all_paragraphs:# 打印每一個(gè)段落的文字zz,key = encrypt(paragraph.text)​#print(’加密:’,zz)#print(’key:’, key)​file.add_paragraph(str(zz))file.save(jkl)​file2.add_paragraph(str(key))file2.save('key.docx')​print(’滑稽研究所出品!’)print(’僅支持英文文件名?!?chenggong = encrypt_file(input(’請(qǐng)輸入需要加密的文件名:’))print('已完成!十秒后自動(dòng)關(guān)閉')time.sleep(10)#生成加密文件

通過 encode 方法,將字符串編碼成字節(jié)串。int.from_bytes 函數(shù)將字節(jié)串轉(zhuǎn)換為 int 對(duì)象。最后對(duì)二進(jìn)制對(duì)象和隨機(jī)密鑰進(jìn)行異或操作,就得到了加密文本。

解密代碼:

from secrets import token_bytesfrom docx import Documentimport docximport time​def random_key(length): # token_bytes,函數(shù)接受一個(gè)int參數(shù),用于指定隨機(jī)字節(jié)串的長(zhǎng)度。 # int.from_bytes把字節(jié)串轉(zhuǎn)換為int,也就是我們需要的二進(jìn)制數(shù) key = token_bytes(nbytes=length) key_int = int.from_bytes(key, ’big’) return key_int​def encrypt(raw): raw_bytes = raw.encode() raw_int = int.from_bytes(raw_bytes, ’big’) key_int = random_key(len(raw_bytes)) return raw_int ^ key_int, key_int​def decrypt(encrypted, key_int): decrypted = encrypted ^ key_int length = (decrypted.bit_length() + 7) // 8 decrypted_bytes = int.to_bytes(decrypted, length, ’big’) return decrypted_bytes.decode()​jjj = []kkk = []​def decrypt_file(path_encrypted, key_path=None, *, encoding=’utf-8’): document = Document(path_encrypted) all_paragraphs = document.paragraphs​ do2 = Document(’key.docx’) all_p= do2.paragraphs​ for i in all_paragraphs:#str轉(zhuǎn)intjiam = int(i.text)jjj.append(jiam)​#print(’加密:’,jiam) #print(jjj)​ for k in all_p:#str轉(zhuǎn)intkey = int(k.text)kkk.append(key)​#print(’key:’,key) #print(kkk)​ cc = zip(jjj,kkk) res = list(cc) return res#傳入元組,或兩個(gè)int。print(’滑稽研究所出品!’)print(’警告,嚴(yán)禁修改密鑰文件名?。?!’)print(’直接輸入文件名,無需格式后綴。’)rr1 = decrypt_file(input('請(qǐng)輸入需要破解文件的文件名(僅限.docx文件):')+’.docx’)​file = docx.Document()for i in rr1: ff = decrypt(*i) #print(ff) #print(type(ff)) file.add_paragraph(ff)file.save('res.docx')print(’解密完成,請(qǐng)?jiān)诋?dāng)前文件夾下提取文件!’)print(’十秒后自動(dòng)關(guān)閉!’)time.sleep(10)

我們需要將兩個(gè)程序打包成exe。運(yùn)行加密程序得到的二進(jìn)制word文檔,可以給其他人,但密鑰必須自己保存。當(dāng)別人滿足你的要求之后,我們可以把密鑰和解密程序給他。注意,只對(duì)docx文件有效,且不可以修改密鑰文件的名稱,不然會(huì)報(bào)錯(cuò),解密失敗。

運(yùn)行結(jié)果:

原始word文件。

Python加密word文檔詳解

加密后:

Python加密word文檔詳解

生成的key密鑰:

Python加密word文檔詳解

加密后的文件和生成的密鑰,放在解密程序文件夾下之后,會(huì)得到如下。我們得到了原文件,美中不足的是所有的首行縮進(jìn)都消失了,變成了左對(duì)齊。

Python加密word文檔詳解

同樣的文件,重新加密之后,會(huì)得到不同的加密文件和密鑰。因此如果加密文件和密鑰不匹配,即使他們的源文件是一樣的,也是無法解密的。此外密鑰丟失,加密的文件將永遠(yuǎn)不能解密。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注好吧啦網(wǎng)的更多內(nèi)容!

標(biāo)簽: python
相關(guān)文章:
主站蜘蛛池模板: 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 学生作文网_中小学生作文大全与写作指导 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 写方案网_方案策划方案模板下载 事迹材料_个人事迹名人励志故事 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 换网器_自动换网器_液压换网器--郑州海科熔体泵有限公司 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 学习虾-免费的学习资料下载平台| 单柱拉力机-橡胶冲片机-哑铃裁刀-江都轩宇试验机械厂 | 青岛成人高考_山东成考报名网| 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 三板富 | 专注于新三板的第一垂直服务平台 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 |