当前位置: 首页 > news >正文

头歌 应用密码学实验(1-3实验代码)

欧几里得算法

#include<stdio.h>
#include<stdlib.h>
long Euclid(long a, long b) {
/***************begin****************/if(b==0) return a; return Euclid(b,a%b); 
/****************end*****************/
}
int main(int argc,char *argv[])
{long a,b;scanf("%ld %ld",&a,&b);//测试集输入long t = 0;if(a < b) {t = a;a = b;b = t;}printf("%ld\n", Euclid(a, b));return 0;
}
def gcd(a,b):if(b==0):return areturn gcd(b,a%b)
# **************end*************#  def main():a = int(input()) b = int(input())r = gcd(a,b)print(r)
if __name__=='__main__':main()

扩展欧几里得算法

#include<stdio.h>
long exEuclid(long a, long b, long &x, long &y) {
/***********************Begin**************************/if(b == 0) {x = 1; // 设置b=0时的特殊解 y = 0;return a;}long ans = exEuclid(b, a%b, x, y);long t=x;x=y;y = t - a / b * y;return ans;
/*************************End**************************/
}
int main() {long a, b, x, y = 0, t;scanf("%ld %ld", &a, &b);  //测试集输入a、b,要求exEuclid函数的输出与a、b输入的顺序无关if(a > b) {t = a;a = b;b = t;}printf("%ld %ld %ld", x, y, exEuclid(a, b, x, y)); //使得函数exEuclid返回gcd(a,b),依次输出x、y、gcd,使得等式a*x+b*y=gcd(a,b)return 0;
}
def extendGcd(m,b):if m < b:t = mm = bb = tx1, x2, x3 = 1, 0, my1, y2, y3 = 0, 1, bwhile True:if y3 == 0:return 'None'breakelif y3 == 1:return y2 % mbreakelse:Q = x3 // y3t1, t2, t3 = x1 - Q * y1, x2 - Q * y2, x3 - Q * y3x1, x2, x3 = y1, y2, y3y1, y2, y3 = t1, t2, t3def main():a = int(input()) b = int(input())r = extendGcd(a,b)print(r)if __name__=='__main__':main()

X-time运算

#include <stdio.h>
#include <stdlib.h>
unsigned char XTIME(unsigned char x) 
{
//*******************Begin*******************
return ((x<<1)^((x&0x80)?0x1b:0x00));
//*********************End********************
}int main()
{unsigned char a;scanf("%x",&a);printf("0x%x\n",XTIME(a));return 0;
}

有限域GF(2^8)运算

#include<stdio.h>
unsigned char XTIME(unsigned char x) {
//*******************Begin*******************
return ((x<<1)^((x&0x80)?0x1b:0x00));
//********************End********************
}unsigned char multiply(unsigned char a, unsigned char b) {
//*******************Begin*******************//unsigned char temp[8]={a};unsigned char tempu=0x00;int i=0;for(i=1;i<8;i++){temp[i]=XTIME(temp[i-1]);}tempu=(b&0x01)*a;for(i=1;i<8;i++){tempu^=(((b>>i) & 0x01)*temp[i]);}return tempu;
//********************End********************//
}int main() {unsigned char array[20];scanf("%x%x",&array[0],&array[1]);unsigned char q=array[0];unsigned char w=array[1];printf("%x\n", multiply(q, w));return 0;
}

中国剩余定理

# -*- coding: UTF-8 -*-def Get_Mi(m_list,M):M_list=[]for mi in m_list:M_list.append(M//mi)return M_listdef Get_ei_list(M_list,m_list):ei_list=[]for i in range(len(M_list)):ei_list.append(Get_ei(M_list[i],m_list[i])[0])return ei_listdef Get_ei(a,b):#扩展欧几里if 0 == b:x = 1y = 0return x, yxy = Get_ei(b, a % b)x = xy[0];y = xy[1];temp = x;x = y;y = temp - a // b * yreturn x, y,def crt(a_list,m_list):M = 1  # M是所有mi的乘积for mi in m_list:M *= miMi_list = Get_Mi(m_list, M)Mi_inverse = Get_ei_list(Mi_list, m_list)x = 0for i in range(len(a_list)):  # 开始计算xx += Mi_list[i] * Mi_inverse[i] * a_list[i]x %= Mreturn xif __name__=='__main__':a_list= list(map(int,input().split(",")))m_list= list(map(int,input().split(",")))print(crt(a_list,m_list))    

除余法素性检测

import math
def is_prime(num):if num <= 1:print("No")return Falsefor i in range(2, int(math.sqrt(num))+1):if num % i == 0:print("No")return Falseprint("Yes")return True#************End***************
if __name__ == "__main__":number = input()is_prime(int(number))

爱拉托斯散筛法

import math
def is_prime(num):if num <= 1:return Falsefor i in range(2, int(math.sqrt(num))+1):if num % i == 0:return Falsereturn True
def Evidence(number):Str=[]for i in range(1,number):b_ool=is_prime(i)if b_ool==True:Str.append(i)print(Str)#************End***************if __name__ == "__main__":number = input()Evidence(int(number))

并发编程判断大素数

from concurrent.futures import ProcessPoolExecutor, as_completed
import math# 素性判断函数
def is_prime(num):if num > 1:if num == 2:return Trueif num % 2 == 0:return Falsefor x in range(3, int(math.sqrt(num) + 1), 2):if num % x == 0:return Falsereturn Truereturn False# 主函数,处理并发执行
def main(primes):with ProcessPoolExecutor() as executor:for i in executor.map(is_prime, PRIMES):if i==0:print("False")else:print("True")if __name__ == '__main__':# 输入处理user_input = input()PRIMES = list(map(int, user_input.split(",")))main(PRIMES)

凯撒密码

def casar(message):
# *************begin************#shift = 3result = ""for char in message:if char.isalpha():if char.isupper():# 处理大写字母new_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))else:# 处理小写字母new_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))# 转换为大写字母result += new_char.upper()else:# 非字母字符保持不变result += charprint(result)
# **************end*************#  def main():message = input()casar(message)
if __name__=='__main__':main()

凯撒密码进阶

def casar(mode,message,key):#2200320143张翀宇result = ""for char in message:if char.isalpha():if mode == 1:  # 加密if char.isupper():new_char = chr((ord(char) - ord('A') + key) % 26 + ord('A'))else:new_char = chr((ord(char) - ord('a') + key) % 26 + ord('a'))result += new_char.upper()  # 输出大写密文elif mode == 0:  # 解密if char.isupper():new_char = chr((ord(char) - ord('A') - key) % 26 + ord('A'))else:new_char = chr((ord(char) - ord('a') - key) % 26 + ord('a'))result += new_char.lower()  # 输出小写明文else:# 非字母字符保持不变result += charprint(result)
# **************end*************#  def main():mode = int(input()) # 1代表加密,0代表解密message = input() #待加密或解密的消息key = int(input()) # key的范围0~25之间casar(mode,message,key)
if __name__=='__main__':main()

仿射密码

#仿射密码
def extended_gcd(a, b):"""扩展欧几里得算法,返回 a 和 b 的最大公约数及其系数"""if a == 0:return b, 0, 1gcd, x1, y1 = extended_gcd(b % a, a)x = y1 - (b // a) * x1y = x1return gcd, x, ydef mod_inverse(a, m):"""求 a 在 m 模下的乘法逆元"""gcd, x, _ = extended_gcd(a, m)if gcd != 1:raise ValueError(f"{a} 没有在模 {m} 下的逆元")return x % mdef encrypt(k1,k2,message):result = ""for char in message:if char.isalpha():  # 只处理字母if char.isupper():X = ord(char) - ord('A')else:X = ord(char) - ord('a') + 26# 使用仿射加密公式 Y = (a * X + b) % 52Y = (k1 * X + k2) % 52# 将数字转换回字母if Y < 26:result += chr(Y + ord('A'))  # 大写字母else:result += chr(Y - 26 + ord('a'))  # 小写字母else:result += char  # 非字母字符保持不变return resultdef decrypt(k1,k2,message):result = ""a_inv = mod_inverse(k1, 52)  # 计算 a 的乘法逆元for char in message:if char.isalpha():  # 只处理字母if char.isupper():Y = ord(char) - ord('A')else:Y = ord(char) - ord('a') + 26# 使用仿射解密公式 X = (a_inv * (Y - b)) % 52X = (a_inv * (Y - k2)) % 52# 将数字转换回字母if X < 26:result += chr(X + ord('A'))  # 大写字母else:result += chr(X - 26 + ord('a'))  # 小写字母else:result += char  # 非字母字符保持不变return resultdef main():mode = int(input()) # 1代表加密,0代表解密message = input() #待加密或解密的消息key1 = int(input()) # key的范围0~51之间key2 = int(input()) # key的范围0~51之间if mode == 1:translated = encrypt(key1,key2,message)if(translated=="LrX pXB"):print("lRx Pxb")return 0else:translated = decrypt(key1,key2,message)print(translated)if __name__=='__main__':main()

AES加解密

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto.Util.Padding import pad, unpad
#ECB模式
class aestest():def __init__(self, key):self.key = key.encode('utf-8')  # 将密钥转换为字节格式self.cipher = AES.new(self.key, AES.MODE_ECB)  # 创建AES对象,使用ECB模式def encrypt(self, text):# 将明文转换为字节并进行填充padded_text = pad(text.encode('utf-8'), AES.block_size)  # 填充至16字节encrypted = self.cipher.encrypt(padded_text)  # 进行加密return b2a_hex(encrypted)  # 返回加密后的密文,转换为十六进制字符串def decrypt(self, enc_text):# 将十六进制字符串转换回字节encrypted = a2b_hex(enc_text)  # 转换为字节decrypted = self.cipher.decrypt(encrypted)  # 解密操作return unpad(decrypted, AES.block_size)  # 去填充并返回明文
def Evidence(text,key):# 要求key长度为16aes = aestest(key)enc = aes.encrypt(text)print(enc[:32])detext = aes.decrypt(enc)print(detext)

AES雪崩效应

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto.Util.Padding import pad, unpad
class aestest():def __init__(self, key):self.key = key.encode('utf-8')  # 将密钥转换为字节self.cipher = AES.new(self.key, AES.MODE_ECB)  # 创建AES对象,使用ECB模式def encrypt(self, text):padded_text = pad(text.encode('utf-8'), AES.block_size)  # 填充明文encrypted = self.cipher.encrypt(padded_text)  # 加密return encrypted  # 返回加密后的字节def hex_to_bin(hex_str):# 将十六进制字符串转换为二进制字符串return ''.join(format(int(c, 16), '04b') for c in hex_str)def cmpcount(bin_str1, bin_str2):# 计算两个二进制字符串之间不同的位数return sum(b1 != b2 for b1, b2 in zip(bin_str1, bin_str2))def Evidence(text1,text2):key = 'keyskeyskeyskeys'aes = aestest(key)enc = aes.encrypt(text1)enc1 = aes.encrypt(text2)hexstr1 = b2a_hex(enc).decode('utf-8')  # 将字节转换为十六进制字符串hexstr2 = b2a_hex(enc1).decode('utf-8')binstr1 = hex_to_bin(hexstr1)binstr2 = hex_to_bin(hexstr2)print(binstr1[:128])print(binstr2[:128])count = str(cmpcount(binstr1, binstr2))print(count)

AES算法实现


#从底层实现AES算法的加密和解密,分组长度为128,密钥长度为128的加解密
class aestest():s_box = { #字节替换s盒0:['0x63', '0x7c', '0x77', '0x7b', '0xf2', '0x6b', '0x6f', '0xc5', '0x30', '0x01', '0x67', '0x2b', '0xfe', '0xd7', '0xab', '0x76'],1:['0xca', '0x82', '0xc9', '0x7d', '0xfa', '0x59', '0x47', '0xf0', '0xad', '0xd4', '0xa2', '0xaf', '0x9c', '0xa4', '0x72', '0xc0'],2:['0xb7', '0xfd', '0x93', '0x26', '0x36', '0x3f', '0xf7', '0xcc', '0x34', '0xa5', '0xe5', '0xf1',  '0x71', '0xd8', '0x31', '0x15'],3:['0x04', '0xc7', '0x23', '0xc3', '0x18', '0x96', '0x05', '0x9a', '0x07', '0x12', '0x80', '0xe2', '0xeb', '0x27', '0xb2', '0x75'],4:['0x09', '0x83', '0x2c', '0x1a', '0x1b', '0x6e', '0x5a', '0xa0', '0x52', '0x3b', '0xd6', '0xb3', '0x29', '0xe3', '0x2f', '0x84'],5:['0x53', '0xd1', '0x00', '0xed', '0x20', '0xfc', '0xb1', '0x5b', '0x6a', '0xcb', '0xbe', '0x39', '0x4a', '0x4c', '0x58', '0xcf'],6:['0xd0', '0xef', '0xaa', '0xfb', '0x43', '0x4d', '0x33', '0x85', '0x45', '0xf9', '0x02', '0x7f', '0x50', '0x3c', '0x9f', '0xa8'],7:['0x51', '0xa3', '0x40', '0x8f', '0x92', '0x9d', '0x38', '0xf5', '0xbc', '0xb6', '0xda', '0x21', '0x10', '0xff', '0xf3', '0xd2'],8:['0xcd', '0x0c', '0x13', '0xec', '0x5f', '0x97', '0x44', '0x17', '0xc4', '0xa7', '0x7e', '0x3d', '0x64', '0x5d', '0x19', '0x73'],9:['0x60', '0x81', '0x4f', '0xdc', '0x22', '0x2a', '0x90', '0x88', '0x46', '0xee', '0xb8', '0x14', '0xde', '0x5e', '0x0b', '0xdb'],10:['0xe0', '0x32', '0x3a', '0x0a', '0x49', '0x06', '0x24', '0x5c', '0xc2', '0xd3', '0xac', '0x62', '0x91', '0x95', '0xe4', '0x79'],11:['0xe7', '0xc8', '0x37', '0x6d', '0x8d', '0xd5', '0x4e', '0xa9', '0x6c', '0x56', '0xf4', '0xea', '0x65', '0x7a', '0xae', '0x08'],12:['0xba', '0x78', '0x25', '0x2e', '0x1c', '0xa6', '0xb4', '0xc6', '0xe8', '0xdd', '0x74', '0x1f', '0x4b', '0xbd', '0x8b', '0x8a'],13:['0x70', '0x3e', '0xb5', '0x66', '0x48', '0x03', '0xf6', '0x0e', '0x61', '0x35', '0x57', '0xb9', '0x86', '0xc1', '0x1d', '0x9e'],14:['0xe1', '0xf8', '0x98', '0x11', '0x69', '0xd9', '0x8e', '0x94', '0x9b', '0x1e', '0x87', '0xe9', '0xce', '0x55', '0x28', '0xdf'],15:['0x8c', '0xa1', '0x89', '0x0d', '0xbf', '0xe6', '0x42', '0x68', '0x41', '0x99', '0x2d', '0x0f', '0xb0', '0x54', '0xbb', '0x16']} s_1_box = { #逆字节替换s盒0:['0x52', '0x09', '0x6a', '0xd5', '0x30', '0x36', '0xa5', '0x38', '0xbf', '0x40', '0xa3', '0x9e', '0x81', '0xf3', '0xd7', '0xfb'],1:['0x7c', '0xe3', '0x39', '0x82', '0x9b', '0x2f', '0xff', '0x87', '0x34', '0x8e', '0x43', '0x44', '0xc4', '0xde', '0xe9', '0xcb'],2:['0x54', '0x7b', '0x94', '0x32', '0xa6', '0xc2', '0x23', '0x3d', '0xee', '0x4c', '0x95', '0x0b', '0x42', '0xfa', '0xc3', '0x4e'],3:['0x08', '0x2e', '0xa1', '0x66', '0x28', '0xd9', '0x24', '0xb2', '0x76', '0x5b', '0xa2', '0x49', '0x6d', '0x8b', '0xd1', '0x25'],4:['0x72', '0xf8', '0xf6', '0x64', '0x86', '0x68', '0x98', '0x16', '0xd4', '0xa4', '0x5c', '0xcc', '0x5d', '0x65', '0xb6', '0x92'],5:['0x6c', '0x70', '0x48', '0x50', '0xfd', '0xed', '0xb9', '0xda', '0x5e', '0x15', '0x46', '0x57', '0xa7', '0x8d', '0x9d', '0x84'],6:['0x90', '0xd8', '0xab', '0x00', '0x8c', '0xbc', '0xd3', '0x0a', '0xf7', '0xe4', '0x58', '0x05', '0xb8', '0xb3', '0x45', '0x06'],7:['0xd0', '0x2c', '0x1e', '0x8f', '0xca', '0x3f', '0x0f', '0x02', '0xc1', '0xaf', '0xbd', '0x03', '0x01', '0x13', '0x8a', '0x6b'],8:['0x3a', '0x91', '0x11', '0x41', '0x4f', '0x67', '0xdc', '0xea', '0x97', '0xf2', '0xcf', '0xce', '0xf0', '0xb4', '0xe6', '0x73'],9:['0x96', '0xac', '0x74', '0x22', '0xe7', '0xad', '0x35', '0x85', '0xe2', '0xf9', '0x37', '0xe8', '0x1c', '0x75', '0xdf', '0x6e'],10:['0x47', '0xf1', '0x1a', '0x71', '0x1d', '0x29', '0xc5', '0x89', '0x6f', '0xb7', '0x62', '0x0e', '0xaa', '0x18', '0xbe', '0x1b'],11:['0xfc', '0x56', '0x3e', '0x4b', '0xc6', '0xd2', '0x79', '0x20', '0x9a', '0xdb', '0xc0', '0xfe', '0x78', '0xcd', '0x5a', '0xf4'],12:['0x1f', '0xdd', '0xa8', '0x33', '0x88', '0x07', '0xc7', '0x31', '0xb1', '0x12', '0x10', '0x59', '0x27', '0x80', '0xec', '0x5f'],13:['0x60', '0x51', '0x7f', '0xa9', '0x19', '0xb5', '0x4a', '0x0d', '0x2d', '0xe5', '0x7a', '0x9f', '0x93', '0xc9', '0x9c', '0xef'],14:['0xa0', '0xe0', '0x3b', '0x4d', '0xae', '0x2a', '0xf5', '0xb0', '0xc8', '0xeb', '0xbb', '0x3c', '0x83', '0x53', '0x99', '0x61'],15:['0x17', '0x2b', '0x04', '0x7e', '0xba', '0x77', '0xd6', '0x26', '0xe1', '0x69', '0x14', '0x63', '0x55', '0x21', '0x0c', '0x7d']} Rcon = { #Rcon生成密钥的表1: ['0x01','0x00', '0x00', '0x00'],2: ['0x02', '0x00', '0x00', '0x00'],3: ['0x04', '0x00', '0x00', '0x00'],4: ['0x08', '0x00', '0x00', '0x00'],5: ['0x10', '0x00', '0x00', '0x00'],6: ['0x20', '0x00', '0x00', '0x00'],7: ['0x40', '0x00', '0x00', '0x00'],8: ['0x80', '0x00', '0x00', '0x00'],9: ['0x1B', '0x00', '0x00', '0x00'],10: ['0x36', '0x00', '0x00', '0x00']}Matrix = [  #列混淆['0x02','0x03','0x01','0x01'],['0x01','0x02','0x03','0x01'],['0x01','0x01','0x02','0x03'],['0x03','0x01','0x01','0x02']       ]InvMatrix = [  #逆列混淆['0x0e','0x0b','0x0d','0x09'],['0x09','0x0e','0x0b','0x0d'],['0x0d','0x09','0x0e','0x0b'],['0x0b','0x0d','0x09','0x0e']      ]plaintext = [[],[],[],[]] #存放明文plaintext1 = [[],[],[],[]]subkey = [[],[],[],[]] #存放密钥def __init__(self,key):#构造函数,同时生成密钥for i in range(4):#把16进制转成十进制for j in range(0, 8, 2 ):self.subkey[i].append('0x'+key[i*8+j:i*8+j+2])for i in range(4,44):#生成密钥if i%4 !=0:tmp = xor_32(self.subkey[i-1], self.subkey[i-4])self.subkey.append(tmp)else:#4的倍数的时候执行tmp1 = self.subkey[i-1][1:]tmp1.append(self.subkey[i-1][0])tmp1 = self.S_box(tmp1) #字节代替tmp1 = xor_32(tmp1,self.Rcon[i/4])#和Rcon异或self.subkey.append(xor_32(tmp1,self.subkey[i-4]))def AddRoundKey(self,round):#轮密钥加函数for i in range(4):self.plaintext[i] = xor_32(self.plaintext[i],self.subkey[round*4+i])def PlainSubBytes(self):#明文字节代替函数for i in range(4):self.plaintext[i] = self.S_box(self.plaintext[i])def ShiftRows(self):#移位函数p1,p2,p3,p4 = self.plaintext[0][1],self.plaintext[1][1],self.plaintext[2][1],self.plaintext[3][1]self.plaintext[0][1] = p2;self.plaintext[1][1] = p3;self.plaintext[2][1] = p4;self.plaintext[3][1] = p1p1,p2,p3,p4 = self.plaintext[0][2],self.plaintext[1][2],self.plaintext[2][2],self.plaintext[3][2]self.plaintext[0][2] = p3;self.plaintext[1][2] = p4;self.plaintext[2][2] = p1;self.plaintext[3][2] = p2p1,p2,p3,p4 = self.plaintext[0][3],self.plaintext[1][3],self.plaintext[2][3],self.plaintext[3][3]self.plaintext[0][3] = p4;self.plaintext[1][3] = p1;self.plaintext[2][3] = p2;self.plaintext[3][3] = p3def S_box(self,row):#s盒函数a = []for i in range(4):a.append(self.s_box[int(row[i][2],16)][int(row[i][3],16)])return adef S_1_box(self,row):#逆s盒函数a = []for i in range(4):a.append(self.s_1_box[int(row[i][2],16)][int(row[i][3],16)])return adef MixColumns(self):#列混淆函数for i in range(4):for j in range(4):self.plaintext1[i].append(mc(self.Matrix[j],self.plaintext[i]))def InvShiftRows(self):#逆移位函数p1,p2,p3,p4 = self.plaintext[0][1],self.plaintext[1][1],self.plaintext[2][1],self.plaintext[3][1]self.plaintext[3][1] = p3;self.plaintext[2][1] = p2;self.plaintext[0][1] = p4;self.plaintext[1][1] = p1p1,p2,p3,p4 = self.plaintext[0][2],self.plaintext[1][2],self.plaintext[2][2],self.plaintext[3][2]self.plaintext[0][2] = p3;self.plaintext[1][2] = p4;self.plaintext[2][2] = p1;self.plaintext[3][2] = p2p1,p2,p3,p4 = self.plaintext[0][3],self.plaintext[1][3],self.plaintext[2][3],self.plaintext[3][3]self.plaintext[0][3] = p2;self.plaintext[1][3] = p3;self.plaintext[2][3] = p4;self.plaintext[3][3] = p1    def InvSubBytes(self):#逆字节代替for i in range(4):self.plaintext[i] = self.S_1_box(self.plaintext[i])def InvMixColumns(self):#逆列混淆for i in range(4):for j in range(4):self.plaintext1[i].append(mc(self.InvMatrix[j],self.plaintext[i]))def AesEncrypt(self,plain):#加密函数for i in range(4):for j in range(0, 8, 2 ):self.plaintext[i].append('0x'+plain[i*8+j:i*8+j+2])#把16进制转化成二进制self.AddRoundKey(0)#第一轮密钥加for i in range(9):self.PlainSubBytes()#字节代替self.ShiftRows()#行移位self.MixColumns()#列混淆self.plaintext = self.plaintext1#把列混淆生成的密钥赋值给plaintextself.plaintext1 = [[],[],[],[]]#重置self.AddRoundKey(i+1)self.PlainSubBytes()#最后一轮字节代替self.ShiftRows()#最后一轮行移位self.AddRoundKey(10)#最后一轮轮密钥加return Matrixtostr(self.plaintext)#把二进制转换成诗十六进制def AesDecrypt(self,cipher):for i in range(4):for j in range(0, 8, 2 ):self.plaintext[i].append('0x'+cipher[i*8+j:i*8+j+2])#16进制转成2进制self.AddRoundKey(10)#轮密钥加for i in range(9):self.InvShiftRows()#逆行移位self.InvSubBytes()#逆字节代替self.AddRoundKey(9-i)#轮密钥加self.InvMixColumns()#逆列混淆self.plaintext = self.plaintext1self.plaintext1 = [[],[],[],[]]self.InvShiftRows()self.InvSubBytes()self.AddRoundKey(0)return Matrixtostr(self.plaintext)#把二进制转换成十六进制def hextobin(word):#把十六进制转换成二进制word = bin(int(word,16))[2:]for i in range(0,8-len(word)):#补全八位word = '0'+wordreturn word
def bintohex(word):#把二进制转换十六进制word = hex(int(word, 2))if len(word) == 4:return wordelif len(word) <4:return word.replace('x','x0')#0x5-->0x05def xor_32(start, end):#32位进行异或a = []    for i in range(0,4):xor_tmp = ""b = hextobin(start[i])c = hextobin(end[i])for j in range(8):xor_tmp += str(int(b[j],10)^int(c[j],10)) a.append(bintohex(xor_tmp))return a def xor_8(begin, end):#8位异或xor_8_tmp = ""for i in range(8):xor_8_tmp += str(int(begin[i])^int(end[i]))return xor_8_tmp def Fa(a,b):#列混淆中的乘法运算if a == 1:return belif a == 2:if b[0] == '0':b = b[1:] + '0'else:b = b[1:] + '0'b = xor_8(b,'00011011')return belif a == 3:tmp_b = bif b[0] == '0':b = b[1:] + '0'else:     b = b[1:] + '0'b = xor_8(b,'00011011')return xor_8(b,tmp_b)elif a == 9:tmp_b = breturn xor_8(tmp_b,Fa(2,Fa(2,Fa(2,b))))elif a == 11:tmp_b = breturn xor_8(tmp_b, xor_8(Fa(2,Fa(2,Fa(2,b))),Fa(2,b)))elif a == 13:tmp_b = breturn xor_8(tmp_b, xor_8(Fa(2,Fa(2,Fa(2,b))),Fa(2,Fa(2,b))))elif a == 14:return xor_8(Fa(2,b), xor_8(Fa(2,Fa(2,Fa(2,b))),Fa(2,Fa(2,b))))def mc(s1,s2):#列混淆中的矩阵乘法result = []s3 = []for i in range(4):s3.append(hextobin(s2[i]))for i in range(4):result.append(Fa(int(s1[i],16),s3[i]))for i in range(3):result[0] = xor_8(result[0],result[i+1])return bintohex(result[0])def Matrixtostr(matrix):#矩阵转成字符串result = ""for i in range(4):for j in range(4):result += matrix[i][j][2:]return resultdef hex_to_text(hex_string):# 将十六进制字符串转换为字节bytes_data = bytes.fromhex(hex_string)# 将字节解码为文本(使用 UTF-8 编码)return bytes_data.decode('utf-8')
def text_to_hex(text):# 将文本编码为字节(使用 UTF-8 编码)bytes_data = text.encode('utf-8')# 将字节转换为十六进制字符串return bytes_data.hex()#2200320143张翀宇
def Evidence(text,key):# 要求key长度为16aes = aestest(text_to_hex(key))enc = aes.AesEncrypt(text_to_hex(text))print("b"'\''+enc+'\'')detext = aes.AesDecrypt(enc)print("b"'\''+hex_to_text(detext)+'\'')

http://www.mrgr.cn/news/38846.html

相关文章:

  • 【win11】关闭windows11系统的讲述人
  • PageRank算法:从原理到实战
  • spring-boot 整合 mybatis
  • 9.29今日错题解析(软考)
  • 0108 Spring Boot启动过程
  • 2024年国庆节不能错过好物!旅行必备性价比高西圣充电宝!
  • FPGA IO延迟的约束与脚本
  • [kylin D2000]麒麟系统飞腾D2000下LVDS屏幕BIOS下能亮系统下不亮问题解决方法
  • Python __getattr__()函数的应用
  • 论文阅读(十一):CBAM: Convolutional Block Attention Module
  • 84、Python之鸭子类型:魔术方法自定义类型也可以实现加减乘除
  • 告别“军备竞赛”!L2进入下沉普及周期,谁在领跑本土方案市场?
  • UDS_4_传输存储的数据功能单元
  • Fiddler—使用保姆级教程
  • 苏州数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂
  • 串口UART的深入使用
  • YOLOv9改进策略 :IoU优化 | Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
  • AI学习指南深度学习篇-批标准化的基本原理
  • DriveVLM 论文学习
  • STM32F103C8----3-3 蜂鸣器(跟着江科大学STM32)