赞
踩
aes ccm和gcm模式做个总结,加密库里没有这两种模式,时间比较紧,自己只写了ccm模式的函数,有需要的童孩拿去用,附件有个生成的exe
if(len(a)>0):
ccm_b0_flag_a = b"1"
else:
ccm_b0_flag_a = b"0"
tes_a = arange(6)
#b0_flag
ccm_b0_flag_data = (int(ccm_b0_flag_a)<<6) + (int((len(t)-2)/2)<<3) + int(14-len(n)) #bytes to int
# ccm_b0_flag_data_byte = bytes(str(hex(int(ccm_b0_flag_data)), encoding='utf-8') #int to str to byte
ccm_b0_flag_data_byte = self.int2bytes(ccm_b0_flag_data) #int to str to byte
ccm_b0.append(ccm_b0_flag_data_byte)
#b0_N
for i in range(len(n)):
ccm_b0.append(self.int2bytes(n[i]))
#b0_Q
bytes_q = bytes(str(hex(len(p))),encoding='utf-8') # 0x(q_tmp) #int to str to byte
# str_bytes_q = bytes_q.decode()
for i in range(0,16-len(ccm_b0)):
ccm_b0.append(b'0x00')
q_len = len(bytes_q[2:]) #剔除“0x ”这两个非数字的符号部分
#填充Q
for i in range(len(bytes_q[2:])):
ccm_b0[16-q_len+i]=self.int2bytes((bytes_q[i+2])-48) #由ascII 转换为 数字
#打印B0
for i in range(ccm_b0.__len__()):
print('ccm_b0 is ',(ccm_b0[i])) #bytes to int
##b1_A值
ccm_a_len_byte = bytes(str(hex(len(a))),encoding='utf-8') # 0x(q_tmp)
if(len(a)<2**16-2**8):
a_len_all_byte = 2
for i in range(0,2):
ccm_b1.append(b'0x00')
elif(len(a)<2**32): # 6 bytes
a_len_all_byte = 6
ccm_b1.append(b'0xff')
ccm_b1.append(b'0xfe')
for i in range(0,4):
ccm_b1.append(b'0x00')
else: #10 bytes
a_len_all_byte = 10
ccm_b1.append(b'0xff')
ccm_b1.append(b'0xff')
for i in range(0,8):
ccm_b1.append(b'0x00')
a_len_byte = len(ccm_a_len_byte[2:])
for i in range(0,len(ccm_a_len_byte[2:])):
ccm_b1[a_len_all_byte-a_len_byte+i] = self.int2bytes((ccm_a_len_byte[2+i])-48)
for i in range(0,len(a)): #填A值
ccm_b1.append(self.int2bytes(a[i]))
while len(ccm_b1)%16:
ccm_b1.append(b"0x00") #长度A 16bytes对齐
#打印B0
for i in range(ccm_b1.__len__()):
print('ccm_b1 is ',(ccm_b1[i])) #bytes to int
#C0_flag
ccm_c0_flag_data = hex(14-len(n))
# ccm_c0_flag_data_byte = bytes(str(ccm_c0_flag_data), encoding=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。