嵿尖势力 2022-10-18 16:20 采纳率: 64.3%
浏览 46
已结题

信息安全,Cryptography密码学

假设我们要使用带加密密钥3的铁路围栏密码解密消息“daxsarineaistestsmoy”。请显示您如何继续操作的步骤。

img

  • 写回答

1条回答 默认 最新

  • 游一游走一走 2022-10-18 16:34
    关注

    drtiansexamissoeasy

    # Python3 program to illustrate
    # Rail Fence Cipher Encryption
    # and Decryption
    
    # function to encrypt a message
    def encryptRailFence(text, key):
    
        # create the matrix to cipher
        # plain text key = rows ,
        # length(text) = columns
        # filling the rail matrix
        # to distinguish filled
        # spaces from blank ones
        rail = [['\n' for i in range(len(text))]
                for j in range(key)]
    
        # to find the direction
        dir_down = False
        row, col = 0, 0
    
        for i in range(len(text)):
    
            # check the direction of flow
            # reverse the direction if we've just
            # filled the top or bottom rail
            if (row == 0) or (row == key - 1):
                dir_down = not dir_down
    
            # fill the corresponding alphabet
            rail[row][col] = text[i]
            col += 1
    
            # find the next row using
            # direction flag
            if dir_down:
                row += 1
            else:
                row -= 1
        # now we can construct the cipher
        # using the rail matrix
        result = []
        for i in range(key):
            for j in range(len(text)):
                if rail[i][j] != '\n':
                    result.append(rail[i][j])
        return("" . join(result))
    
    # This function receives cipher-text
    # and key and returns the original
    # text after decryption
    def decryptRailFence(cipher, key):
    
        # create the matrix to cipher
        # plain text key = rows ,
        # length(text) = columns
        # filling the rail matrix to
        # distinguish filled spaces
        # from blank ones
        rail = [['\n' for i in range(len(cipher))]
                for j in range(key)]
    
        # to find the direction
        dir_down = None
        row, col = 0, 0
    
        # mark the places with '*'
        for i in range(len(cipher)):
            if row == 0:
                dir_down = True
            if row == key - 1:
                dir_down = False
    
            # place the marker
            rail[row][col] = '*'
            col += 1
    
            # find the next row
            # using direction flag
            if dir_down:
                row += 1
            else:
                row -= 1
    
        # now we can construct the
        # fill the rail matrix
        index = 0
        for i in range(key):
            for j in range(len(cipher)):
                if ((rail[i][j] == '*') and
                        (index < len(cipher))):
                    rail[i][j] = cipher[index]
                    index += 1
    
        # now read the matrix in
        # zig-zag manner to construct
        # the resultant text
        result = []
        row, col = 0, 0
        for i in range(len(cipher)):
    
            # check the direction of flow
            if row == 0:
                dir_down = True
            if row == key-1:
                dir_down = False
    
            # place the marker
            if (rail[row][col] != '*'):
                result.append(rail[row][col])
                col += 1
    
            # find the next row using
            # direction flag
            if dir_down:
                row += 1
            else:
                row -= 1
        return("".join(result))
    
    # Driver code
    if __name__ == "__main__":
        print(decryptRailFence("daxsarineaisestsmoy", 3))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月18日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号