资源简介
实现SM4的加密和解密,加密前按PKCS#7对明文消息进行填充。
输入和输出要求:加密时,输出加密的每一轮的中间结果和最后的密文;解密时,输出解密的每一轮的中间结果和最后的明文。
代码片段和文件信息
import random
s = [[‘D6‘‘90‘‘E9‘‘FE‘‘CC‘‘E1‘‘3D‘‘B7‘‘16‘‘B6‘‘14‘‘C2‘‘28‘‘FB‘‘2C‘‘05‘]
[‘2B‘‘67‘‘9A‘‘76‘‘2A‘‘BE‘‘04‘‘C3‘‘AA‘‘44‘‘13‘‘26‘‘49‘‘86‘‘06‘‘99‘]
[‘9C‘‘42‘‘50‘‘F4‘‘91‘‘EF‘‘98‘‘7A‘‘33‘‘54‘‘0B‘‘43‘‘ED‘‘CF‘‘AC‘‘62‘]
[‘E4‘‘B3‘‘1C‘‘A9‘‘C9‘‘08‘‘E8‘‘95‘‘80‘‘DF‘‘94‘‘FA‘‘75‘‘8F‘‘3F‘‘A6‘]
[‘47‘‘07‘‘A7‘‘FC‘‘F3‘‘73‘‘17‘‘BA‘‘83‘‘59‘‘3C‘‘19‘‘E6‘‘85‘‘4F‘‘A8‘]
[‘68‘‘6B‘‘81‘‘B2‘‘71‘‘64‘‘DA‘‘8B‘‘F8‘‘EB‘‘0F‘‘4B‘‘70‘‘56‘‘9D‘‘35‘]
[‘1E‘‘24‘‘0E‘‘5E‘‘63‘‘58‘‘D1‘‘A2‘‘25‘‘22‘‘7C‘‘3B‘‘01‘‘21‘‘78‘‘87‘]
[‘D4‘‘00‘‘46‘‘57‘‘9F‘‘D3‘‘27‘‘52‘‘4C‘‘36‘‘02‘‘E7‘‘A0‘‘C4‘‘C8‘‘9E‘]
[‘EA‘‘BF‘‘8A‘‘D2‘‘40‘‘C7‘‘38‘‘B5‘‘A3‘‘F7‘‘F2‘‘CE‘‘F9‘‘61‘‘15‘‘A1‘]
[‘E0‘‘AE‘‘5D‘‘A4‘‘9B‘‘34‘‘1A‘‘55‘‘AD‘‘93‘‘32‘‘30‘‘F5‘‘8C‘‘B1‘‘E3‘]
[‘1D‘‘F6‘‘E2‘‘2E‘‘82‘‘66‘‘CA‘‘60‘‘C0‘‘29‘‘23‘‘AB‘‘0D‘‘53‘‘4E‘‘6F‘]
[‘D5‘‘DB‘‘37‘‘45‘‘DE‘‘FD‘‘8E‘‘2F‘‘03‘‘FF‘‘6A‘‘72‘‘6D‘‘6C‘‘5B‘‘51‘]
[‘8D‘‘1B‘‘AF‘‘92‘‘BB‘‘DD‘‘BC‘‘7F‘‘11‘‘D9‘‘5C‘‘41‘‘1F‘‘10‘‘5A‘‘D8‘]
[‘0A‘‘C1‘‘31‘‘88‘‘A5‘‘CD‘‘7B‘‘BD‘‘2D‘‘74‘‘D0‘‘12‘‘B8‘‘E5‘‘B4‘‘B0‘]
[‘89‘‘69‘‘97‘‘4A‘‘0C‘‘96‘‘77‘‘7E‘‘65‘‘B9‘‘F1‘‘09‘‘C5‘‘6E‘‘C6‘‘84‘]
[‘18‘‘F0‘‘7D‘‘EC‘‘3A‘‘DC‘‘4D‘‘20‘‘79‘‘EE‘‘5F‘‘3E‘‘D7‘‘CB‘‘39‘‘48‘]]
FK = [‘A3B1BAC6‘‘56AA3350‘‘677D9197‘‘B27022DC‘]
CK = [‘00070E15‘‘1C232A31‘‘383F464D‘‘545B6269‘‘70777E85‘‘8C939AA1‘‘A8AFB6BD‘‘C4CBD2D9‘‘E0E7EEF5‘‘FC030A11‘‘181F262D‘
‘343B4249‘‘50575E65‘‘6C737A81‘‘888F969D‘‘A4ABB2B9‘‘C0C7CED5‘‘DCE3EAF1‘‘F8FF060D‘‘141B2229‘‘30373E45‘‘4C535A61‘
‘686F767D‘‘848B9299‘‘A0A7AEB5‘‘BCC3CAD1‘‘D8DFE6ED‘‘F4FB0209‘‘10171E25‘‘2C333A41‘‘484F565D‘‘646B7279‘]
def char_to_bit(plaintext): #将明文消息转换为01bit串
bits = ‘‘
for letter in plaintext:
temp = bin(ord(letter))[2:]
for i in range(8-len(temp)):
temp = ‘0‘ + temp
bits += temp
return bits
def bit_to_char(result): #将解密出来的01串转化为字符
plaintext = ‘‘
for i in range(len(result)//8):
plaintext += chr(int(result[i*8:(i+1)*8]2))
return plaintext
def key_group(key): #密钥扩展第一步,MKi异或FKi
MY = []
K = []
newFK = []
for i in range(4):
MY.append(key[32*i:(i+1)*32])
for each in FK:
temp = bin(int(each16))[2:]
for j in range(32-len(temp)):
temp = ‘0‘+temp
newFK.append(temp)
for i in range(4):
K.append(xor(newFK[i]MY[i]))
return K
def key_L(word): #密钥扩展第二步L‘
word1 = word[13:]+word[:13]
word2 = word[23:]+word[:23]
result = xor(xor(wordword1)word2)
return result
def key_extend(K): #密钥扩展第二步
rk = []
newCK = []
for each in CK:
temp = bin(int(each16))[2:]
for j in range(32-len(temp)):
- 上一篇:python面试题100道
- 下一篇:python实现类似于QQ或MSN的聊天系统
相关资源
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
- 量化交易(附python常见函数的使用方
评论
共有 条评论