2012-10-03 4 views
3

다음 코드를 사용하여 메모리의 전체 파일 내용을 읽고 암호화 할 수 있다고 알려져 있습니다.M2Crypto를 사용하여 파일 암호화

contents = fin.read() 
cipher = M2Crypto.EVP.Cipher(alg="aes_128_cbc", key = aes_key, iv = aes_iv, op = 1) 
encryptedContents = cipher.update(contents) 
encryptedContents += cipher.final() 

하지만 파일 크기가 큰 경우, 대신에 먼저 전체 파일을 읽는 M2Crypto의 입력 스트림을 전달하는 저를위한 방법이 ?

+1

합니다. 그러나 만약 내가 추측했다면, 사용자는 고정 크기의 버퍼를 사용할 수 있어야하고, 그 파일을 읽고, 암호화 된 블록을 뱉어내는'.update()'를 계속 실행해야한다. '. final()'은 마지막에 패딩을 생성하는 메소드처럼 보입니다. – NullUserException

답변

3

.update (데이터)를 여러 번 호출 할 수 있음을 이해했습니다.

메모리 사용을 최소화하고 당신이 할 수 있어야 출력을위한 파일을 사용하려면 : 나는 당신이 그것에 스트림을 전달할 수 있다고 생각하지 않습니다

cipher = M2Crypto.EVP.Cipher(alg="aes_128_cbc", key = aes_key, iv = aes_iv, op = 1) 
encrypted_contents_file = open(outfile_name, "w") 

while True: 
    buf = fin.read(1024) 
    if not buf: 
     break 
    encrypted_contents_file.write(cipher.update(buf)) 

encrypted_contents_file.write(cipher.final()) 
+0

감사합니다. 업데이트를 여러 번 호출 할 수 있는지 모르겠습니다. – Bear