用python实现aes ECB/CBC/CTR/CCM 的可执行文件

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=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值