python手动实现DES算法

本文介绍了使用Python实现DES加密算法的过程,包括初始置换、扩展运算、异或操作、S盒置换、置换运算等核心步骤,并提供了详细的代码实现。通过对比验证,确保了算法的准确性。
该文章已生成可运行项目,

密码学实验老师让我们做手算DES加密的课堂解压小游戏,我这么懒怎么可能手算…(于是我悄悄用python了)

回到宿舍又把DES算法仔细研究并独立实现了一遍,经调试验证,每个细节的数据都和课本上给出的样例数据对照无误。

完整的每一步的数据在 张焕国的《密码学引论》第三版的66页,感兴趣的可以自行验证。

import numpy as np

""" code by bak """

class DES:
    # 初始置换表,长度为64
    IP_table = np.array([
        58,50,42,34,26,18,10,2,
        60,52,44,36,28,20,12,4,
        62,54,46,38,30,22,14,6,
        64,56,48,40,32,24,16,8,
        57,49,41,33,25,17, 9,1,
        59,51,43,35,27,19,11,3,
        61,53,45,37,29,21,13,5,
        63,55,47,39,31,23,15,7,
    ])

    # 初始置换表的逆置换表,长度为64
    IP_table_reverse = np.array([
        40,8,48,16,56,24,64,32,
        39,7,47,15,55,23,63,31,
        38,6,46,14,54,22,62,30,
        37,5,45,13,53,21,61,29,
        36,4,44,12,52,20,60,28,
        35,3,43,11,51,19,59,27,
        34,2,42,10,50,18,58,26,
        33,1,41, 9,49,17,57,25,
    ])

    # f函数中的扩展运算E置换表,长度为48
    E_table = np.array([
        32, 1, 2, 3, 4, 5,
        4, 5, 6, 7, 8, 9,
        8, 9,10,11,12,13,
        12,13,14,15,16,17,
        16,17,18,19,20,21,
        20,21,22,23,24,25,
        24,25,26,27,28,29,
        28,29,30,31,32, 1,
    ])

    # f函数中的置换运算P置换表,长度为32
    P_table = np.array([
        16, 7,20,21,
        29,12,28,17,
         1,15,23,26,
         5,18,31,10,
         2, 8,24,14,
        32,27, 3, 9,
        19,13,30, 6,
        22,11, 4,25,
    ])

    # 8个S盒
    S_BOXS = np.array([
        [
            [14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7],
            [0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8],
            [4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0],
            [15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13],
        ],[
            [15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10],
            [3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5],
            [0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15],
    
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值