Go의 ChaCha20-Poly1305 구현을 사용하여 데이터를 암호화하고 있는데 일부 대용량 파일을 암호화할 때 메모리 사용량이 예상보다 높습니다. 내가 아는 한, Go의 AEAD 암호 구현은 해시를 생성하기 위해 전체 데이터를 메모리에 유지해야 한다는 것을 의미하지만 메모리 사용량은 일반 텍스트 크기의 두 배입니다.
4GiB의 데이터를 암호화하려는 다음 작은 프로그램은 이를 강조합니다(실제 프로그램에서는 key
和 nonce
비어 있으면 안 됨).
crypto/cipher/gcm.go
소스 코드(AES-GCM 및 ChaCha20-Poly1305 모두에서 사용됨)에 따르면 다음과 같은 설명이 있습니다.
이것은 메모리를 재사용할 수 있어야 함을 의미합니다. 이 작업을 시도했지만 내 애플리케이션에서 사용하는 메모리 양에는 영향을 미치지 않습니다. 호출한 후에는 Seal()
항상 8GiB의 메모리를 사용하게 됩니다. GiB의 데이터를 암호화하시겠습니까?
암묵적으로 메모리를 재사용한다면 AEAD 암호가 암호문에 추가하는 상대적으로 작은 해시 외에는 큰 증가를 기 대해서는 안 됩니까?
암호문에 추가된 인증 토큰을 고려하는 것을 잊으셨습니다. 초기 할당에서 공간을 확보하면 추가 할당이 필요하지 않습니다.
으아악위 내용은 cipher.AEAD.Seal()을 사용하여 메모리 사용량을 확인하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!