Python 置换(使用密钥顺序交换二进制文件)

Python 置换(使用密钥顺序交换二进制文件),python,python-3.x,Python,Python 3.x,我想用41325768键重新排列这个“01110100”, 预期结果:11100010,代码结果:10110010 def perm(block, key): block = list(block) key = list(map(int, str(key))) # converting key to list key = [x - 1 for x in key] # subtracting 1 from each (zero based) new_key =

我想用41325768键重新排列这个“01110100”, 预期结果:11100010,代码结果:10110010

def perm(block, key):
    block = list(block) 
    key = list(map(int, str(key)))  # converting key to list
    key = [x - 1 for x in key]  # subtracting 1 from each (zero based)
    new_key = [key[i] for i in key] 
    block = [block[i] for i in new_key]
    block = "".join(block)
    return block
  • 因此,我添加了这一行
    new_key=[key[I]for I in key]
    来解决这个问题,但结果非常接近:11100100
    不知道该怎么做来修复它…你想要的和你拥有的之间的区别在于对钥匙的理解不同。例如,关于键开头的“4”,您希望它表示“将第一个字符放在第四个位置”,但它被用来表示“从第四个位置取第一个字符”

    您可以通过以下方式更改为预期操作:

    def perm(块,键):
    新块=[“”]*len(键)
    对于ix,枚举中的kval(键):
    新块[int(kval)-1]=块[ix]
    返回“”。加入(新块)
    keyc=输入('排列键:')
    plain=输入('要编码的字符串:')
    打印('\nResult:',perm(str(普通),str(keyc)))
    
    输入/输出:

    置换键:41325768
    要编码的字符串:01110100
    结果:11100010
    
    我想我理解了这意味着什么,但你的方法是错误的,这是我编写的代码的一个简单版本

    bi_s = '01110100'
    key_s = '41325768'
    
    new_bi = ''
    
    bi_list = list(map(int, str(bi_s)))
    key_list = list(map(int, str(key_s)))
    
    
    print("The New Key")
    for i in key_list:
        # print(bi_list[i-1], end='', flush=True)
        new_bi += str(bi_list[i-1])
    print(new_bi)
    
    
    print("The Origin Key")
    for i in bi_list:
        print(i, end='', flush=True)
    
    
    输出:

    The New Key
    10110010
    The Origin Key
    01110100
    

    你能告诉我们结果是什么吗?pp=perm('011101100',41325768)print(pp)10110010,我在纸上做了排列应该是:11100010@yungmaz13你的解决方案没有解决问题仍然10110010“将第一个字符放在第四位”正是我的意思…没问题,感谢您解释这行代码的作用:new_block=[”“]*len(key),以及?
    new_block=[”“]*len(key)
    之后的那一行将创建一个与键长度相同的字符列表,并填充空格
    。在迭代过程中,会产生一个计数,在本例中是
    key
    的字符。在这里,如果在范围(len(key))中为ix设置
    后接
    kval=key[ix]