资源简介
实现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的聊天系统
相关资源
- python实现类似于QQ或MSN的聊天系统
- python面试题100道
- python_docx-0.8.10-py2.py3-none-any.whl
- python3.4中文学习手册chm
- python 2.7中文手册chm版
- 产生式系统包含动物识别规则库,手
- 数据挖掘教学视频实战超详细加pyth
- python实现KNN手写字体识别Demo
- python q-learning
- python3网络爬虫与开发实战崔庆才PDF百
- python语言实现通过树莓派Pi camera的图
- 扫雷 python
- python习题
- ngramScore适应度计算文件(包含引入的
- 爱鲜蜂项目源码
- python300G视频书籍教程.zip
- Python点餐案例
- apriori python 3
- Python-Django搭建简单网站源码
- PSO优化的BP神经网络——python实现
- 基于Python专业网络爬虫的设计与实现
- 爬虫视频案例课程----崔庆财
- 漏洞验证脚本ssl-deacth-alert(cve-2016-
- 后台管理系统 v1.0.0
- python获取城市各公交线路及公交站点
- 麦子学院Python视频.txt
- starfm算法实现
- PYQT5+图片拖拽
- python+sqlite学生成绩管理
- Python手势识别与控制源码
评论
共有 条评论