0

これを説明するのは非常に難しいですが、文にパディングを追加して、その文の文字がnの倍数になるようにします。

ただし、この数値「4」は3と5に変更する必要があるため、その場合も機能する必要があります。

誰かが私が何について話しているのか知っていますか?そしてそれを行う方法は?

4

3 に答える 3

2

以下の自己コメントコードが概念を理解するのに役立つことを願っています。どちらかの端のパッド文字を取得するには、いくつかの計算を行う必要があります

いくつかの概念

  1. 必要な追加文字パディング=len(string)%block_length
  2. Total_Pad_Characters = block_length-len(string)%block_length
  3. 前面のパッドキャラクター=Total_Pad_Characters/ 2
  4. 最後のパッド文字=Total_Pad_Characters-Total_Pad_Characters/ 2

これがコードです

>>> def encrypt(st,length):
    #Reversed the String and replace all Spaces with 'X'
    st = st[::-1].replace(' ','X')
    #Find no of characters to be padded.
    padlength = (length - len(st)%length) % length
    #Pad the Characters at either end
    st = 'X'*(padlength/2)+st+'X'*(padlength-padlength/2)
    #Split it with size length and then join with a single space
    return ' '.join(st[i:i+length] for i in xrange(0,len(st),length))

>>> encrypt('THE PRICE OF FREEDOM IS ETERNAL VIGILENCE', 4) #Your Example
'XECN ELIG IVXL ANRE TEXS IXMO DEER FXFO XECI RPXE HTXX'
>>> encrypt('THE PRICE', 5) # One Extra Character at end for Odd Numbers
'ECIRP XEHTX'
>>> encrypt('THE PRIC', 5) # 1 Pad Characters at either end
'XCIRP XEHTX'
>>> encrypt('THE PRI', 5) # 1 Pad Characters at either end and one Extra for being Odd
'XIRPX EHTXX'
>>> encrypt('THE PR', 5) # 2 Pad Characters at either end
'XXRPX EHTXX'
>>> encrypt('THE P', 5) # No Pad characters required
'PXEHT'
>>> encrypt('THE PRICE OF FREEDOM IS ETERNAL VIGILENCE', 5) #Ashwini's Example
'XXECN ELIGI VXLAN RETEX SIXMO DEERF XFOXE CIRPX EHTXX'
>>>
于 2012-04-09T09:47:13.913 に答える
0
>>> import math
>>> def encrypt(string, length):
        inverse_string = string.replace(' ','X')[::-1]

        center_width = int(math.ceil(len(inverse_string)/float(length)) * length) # Calculate nearest multiple of length rounded up

        inverse_string = inverse_string.center(center_width,'X')

        create_blocks = ' '.join(inverse_string[i:i+length] for i in xrange(0,len(inverse_string),length))
        return create_blocks

>>> encrypt('THE PRICE OF FREEDOM IS ETERNAL VIGILENCE', 4)
'XECN ELIG IVXL ANRE TEXS IXMO DEER FXFO XECI RPXE HTXX'
于 2012-04-09T09:34:47.140 に答える
0
def pad(yourString,blockLength):
    return yourString + ("X" * (blockLength - (len(yourString) % blockLength)))

あなたのパディング機能です。エンドパディング用。センターパディングが必要な場合:

def centerPad(yourString,blockLength):
    return ("X" * ((blockLength - (len(yourString) % blockLength))/2)) + yourString + ("X" * ((blockLength - (len(yourString) % blockLength))/2))

ブロック暗号を実装する場合は、コードの残りの部分を詳しく調べる必要があります。

于 2012-04-09T09:28:39.183 に答える