Python实现DES加密解密的方法介绍(代码)
本篇文章给大家带来的内容是关于Python实现DES加密解密的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
DES(Data Encryption Standard)采用64位的分组长度和56位的密钥长度。它将64位的输入经过一系列变换得到64为的输出。解密使用相同的步骤和相同的密钥,唯一不同的是密钥顺序与加密过程相反。
DES加密:
该算法的输入有需要加密的明文和加密使用的密钥,二者长度都为64位。其中密钥的第8,16,24,32,40,48,56,64位为奇偶校验位。
1、明文的处理
将明文读入程序并将其化为二进制串
def inputText(filename): with open(filename,'r')as f: text = f.read() text = text.split('\n') text = [eval(x) for x in text] text = ['{:08b}'.format(x) for x in text] text = ''.join(text) return text
对明文进行IP置换,并划分为左右两个子串
def IP_Transposition(plaintext): LR = [] for i in IP: LR.append(int(plaintext[i-1])) L = LR[:32] R = LR[32:] return L,R
2、对密钥的处理
将密钥读入程序并以二进制串的形式存储
对密钥进行PC-1置换,并划分为两个子串
#密钥置换 def Key_Transposition(key): CD = [] for i in PC_1: CD.append(int(key[i-1])) C = CD[:28] D = CD[28:] return C,D
在生成迭代所需要的密钥之前需要对密钥进行置换压缩
#密钥压缩 def Key_Compress(C,D): key = C+D new_key = [] for i in PC_2: new_key.append(key[i-1]) return new_key
生成DES每轮迭代所需要的子密钥,以便加密解密时直接使用
def generateKset(key): key = inputKey(key) C,D = Key_Transposition(key) K = [] for i in LeftRotate: C = Key_LeftRotate(C,i) C = Key_LeftRotate(D,i) K.append(Key_Compress(C,D)) return K
3、F函数
在每轮变换中,整个过程可以用以下公式表示:
$$ L_i = R_{i-1} $$
$$ R_i = L_{i-1}\bigoplus F(R_{i-1},K_i) $$
其中轮密钥 Ki长48位,R长32位,首先将R置换扩展为48位,这48位与Ki异或,得到的结果用替代函数作用产生32位的输出。这32位的输出经P置换后与L异或得到新的R
代替函数由8个S盒来组成,每个S盒都有6位的输入和4位的输出。对每个S盒,输入的第一位和最后一位组成一个2位的二进制数,用来选择S盒4行替代值中的一行,中间4位用来选择16列中的某一列。
#明文R扩展为48位 def R_expand(R): new_R = [] for i in E: new_R.append(R[i-1]) return new_R #将两列表元素异或 def xor(input1,input2): xor_result = [] for i in range(0,len(input1)): xor_result.append(int(input1[i])^int(input2[i])) return xor_result #将异或的结果进行S盒代替 def S_Substitution(xor_result): s_result = [] for i in range(0,8): tmp = xor_result[i*6:i*6+5] row = tmp[0]*2+tmp[-1] col = tmp[1]*8+tmp[2]*4+tmp[3]*2+tmp[4] s_result.append('{:04b}'.format(S[i][row][col])) s_result = ''.join(s_result) return s_result #F函数 def F(R,K): new_R = R_expand(R) R_Kxor= xor(new_R,K) s_result = S_Substitution(R_Kxor) p_result = P_Transposition(s_result) return p_result #将S盒代替的结果进行P置换 def P_Transposition(s_result): p_result = [] for i in P: p_result.append(int(s_result[i-1])) return p_result
4、加密过程
DES加密需要经过16轮迭代,前15轮迭代每次结束需要交换L和R,第16次不交换
def DES_encrypt(filename,key,outputFile): #从文件中读取明文 plaintext = inputText(filename) #将明文进行置换分离 L,R = IP_Transposition(plaintext) #生成Kset K = generateKset(key) for i in range(0,15): oldR = R #F函数 p_result = F(R,K[i]) R = xor(L,p_result) L = oldR p_result = F(R,K[15]) L = xor(L,p_result) #IP逆置换 reversedP = IP_reverseTransp(L+R) #生成16进制表示的密文 Cipher = generateHex(reversedP) #将密文写入outputFile文件 writeFile(outputFile,Cipher) return Cipher
DES解密:
def DES_decrypt(filename,key,outputFile): #文件中读取密文 Ciphertext = inputText(filename) #将密文进行置换分离 L,R = IP_Transposition(Ciphertext) #生成Kset K = generateKset(key) for i in range(15,0,-1): oldR = R #F函数 p_result = F(R,K[i]) R = xor(L,p_result) L = oldR p_result = F(R,K[0]) L = xor(L,p_result) reversedP = IP_reverseTransp(L+R) plaintext = generateHex(reversedP) writeFile(outputFile,plaintext) return plaintext
源码地址 https://github.com/SuQinghang...
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!
Atas ialah kandungan terperinci Python实现DES加密解密的方法介绍(代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Docker menggunakan ciri -ciri kernel Linux untuk menyediakan persekitaran berjalan yang cekap dan terpencil. Prinsip kerjanya adalah seperti berikut: 1. Cermin digunakan sebagai templat baca sahaja, yang mengandungi semua yang anda perlukan untuk menjalankan aplikasi; 2. Sistem Fail Kesatuan (Unionfs) menyusun pelbagai sistem fail, hanya menyimpan perbezaan, menjimatkan ruang dan mempercepatkan; 3. Daemon menguruskan cermin dan bekas, dan pelanggan menggunakannya untuk interaksi; 4. Ruang nama dan cgroups melaksanakan pengasingan kontena dan batasan sumber; 5. Pelbagai mod rangkaian menyokong interkoneksi kontena. Hanya dengan memahami konsep -konsep teras ini, anda boleh menggunakan Docker dengan lebih baik.

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.
