2017-09-07 9 views
0

파이썬이나 암호에 대한 많은 지식이 없기 때문에 해결책을 찾을 수 없었지만 문제는 패딩과 관련이 있다고 생각합니다. 이 스크립트는 두 가지 기능을 사용하여 암호를 가져오고 암호를 해독합니다. 나는 오류가 점점 오전 : 나는 패딩 함께 할 수있는 뭔가가 생각파이썬의 암호화를위한 패딩 AES

ValueError: The length of the provided data is not a multiple of the block length.

합니다.

키 : 8$4Tws[14R!,0Ba|

암호화 된 패스 : YTj+F1oo5OUNBgKyfifN/2R2zvFLFHbXu4Te2+OvBJ7JRae1DMVJR42qK0GucmiUyTGdtQzFSUeNqitBrnJolMkxp7UMxUlHeaor

기능 :

from django.utils.encoding import force_bytes, force_text 

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes 
from cryptography.hazmat.backends import default_backend 

@property 
def password(self): 
    """Password getter.""" 
    return decrypt(self._password) 

def decrypt(ct): 
    backend = default_backend() 
    key = param_tools.get_global_parameter("secret_key", app="core") 
    print(key) 
    cipher = Cipher(
     algorithms.AES(force_bytes(key)), modes.ECB(), backend=backend) 
    ct = base64.b64decode(force_bytes(ct)) 
    decryptor = cipher.decryptor() 
    clear = decryptor.update(ct) + decryptor.finalize() 
    return force_text(clear.rstrip(b" ")) 

당신이 도와 주실 수

다음은 스크립트에 의해 사용되는 값입니다? 덕분에

+0

아마도 : https : // stackoverflow.com/questions/17773450/왜 - 모든 - 입력 - 투 - 아이즈 - 16의 배수' – mbieren

+0

제공된 '암호화 된 패스 75 바이트를 얻는다. 75 바이트는 AES에서 요구하는 16의 배수가 아닙니다. 제공된 '암호화 된 패스'에 문제가 있거나 암호화/인코딩 방법에 대한 이해가 있습니다. –

+0

감사합니다 얘들 아 .. @ EbbeM.Pedersen 스크립트가 암호를 암호화하는 데 동일한 절차를 사용한 경우 좋은 점은 결과가 유효하고 해독 가능해야합니다. 맞습니까? 스크립트를 실행하는 동안 방금 인쇄 한 값입니다. 그래서 나는 또한 암호화 측을 검사 할 것이고,이 값들은 DB에 저장되고이 스크립트에 의해 암호 해독에 사용되어 어딘가에서 엉망이 될 것입니다. – InToSSH

답변

0

그래서 모두가 패키지와 함께이 문제에 직면에 대한 modoboa-imap-migration

문제는 DB 테이블의 마이그레이션을위한 modoboa_imap_migration_migration이 패키지를 저장하는 모든 암호가 열 _password은 VARCHAR (100)에 자체입니다 hovewer 것을이었다 암호화 된 패스를 저장하기에는 충분하지 않습니다. 나는 이것을 varchar (255)로 늘렸고 이제는 모든 것이 잘 돌아 간다.