>

안전한 클라우드 공유 응용 프로그램 프로젝트를 위해 높은 수준의 암호화 및 암호 해독 클래스를 만들려고합니다. 그리고 동일한 키, nonce 및 "허가되었지만 암호화되지 않은 데이터"를 사용하기 위해 그것이 무엇을 의미하는지 모릅니다. 이 수업을 사용하고 있습니다. 그러나 왜 InvalidTag 예외가 발생하는지 이해할 수 없었습니다. 동일한 값을 복원하고 대칭 적으로 암호 해독을 수행하고 있습니다. 흥미롭게도 변수에 값을 저장하는 클래스없이 작동합니다. 같은 값으로 같은 변수를 복원하는 것의 차이점은 무엇입니까?

import os
from base64 import urlsafe_b64encode, urlsafe_b64decode
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
class cryptoUtils(AESGCM):
    def __init__(self, key=None):
        self.key = key if key else self.newKey()
        self.nonce = os.urandom(12)
        # Initialize AESGCM
        super().__init__(self.key) <------------------
    def encryptFile(self, fileName):
        with open(fileName, "rb") as aFile:
            pText = aFile.read()
        eText = self.encrypt(self.nonce, pText, None)
        newFile = "{}.enc".format(fileName)
        with open(newFile, "wb") as bFile:
            bFile.write(eText)
    def decryptFile(self, fileName):
        with open(fileName, "rb") as bFile:
            eText = bFile.read()
        pText = self.decrypt(self.nonce, eText, None)
        newFile = fileName[0:-4]
        with open(newFile, "wb") as aFile:
            aFile.write(pText)
    def exportKey(self):
        key = "".join(map(chr, self.key))
        nonce = "".join(map(chr, self.nonce))
        str = "{}:{}".format(key, nonce)
        return str
    def importKey(self, input):
        self.key = input.split(":")[0]
        self.nonce = input.split(":")[1]

이 클래스를 기본 파일로 가져오고 다음과 같이 사용합니다 :

from crypto import cryptoUtils
if __name__ == "__main__":
    cu1 = cryptoUtils()
    cu1.importKey("Gr0k6-ve8p7_5ysGEoLmnQ==:LylEffLP1a_fElsy")
    cu1.encryptFile("T.pdf")
    cu2 = cryptoUtils()
    cu2.importKey("Gr0k6-ve8p7_5ysGEoLmnQ==:LylEffLP1a_fElsy")
    cu2.decryptFile("T.pdf.enc")

감사합니다.

  • 답변 # 1

    super().__init__(self.key) 에게 전화하는 것을 잊고 있습니다  키를 가져온 후. 키가 설정되었지만 새 키 값이 직접 사용되지 않을 수 있습니다.

    AESGCM 와 같은 클래스를확장하지 마십시오 . 대신 이러한 클래스를 사용하여 필요한 기능을 수행하는 클래스를 작성하십시오. 그런 다음 특정 기능에 대한 테스트 사례를 작성하십시오 (이 경우 특정 파일 암호화/복호화).

관련 자료

  • 이전 react native cli - 반응 네이티브 클리닉 - 안드로이드 프로젝트를 실행하지 못함
  • 다음 java - 연결된 목록은 데이터 유형으로 데이터를 표시합니다