次に、ファイルを暗号化します

みなさん、こんにちは。私の名前はジャックポップです。今日はプライバシー保護のトピックについてお話します。

コンピュータを長期間使用した後、ドキュメント、オーディオ、ビデオ、その他の形式を含むがこれらに限定されない、いくつかの個人情報が時間の経過とともに蓄積されます。

クラウドディスクに保存する...ご存知のように、パブリッククラウドディスクはセキュリティが低く、いつか暴走する可能性があります。

それをコンピュータに保存してください....そしてプライバシーの漏洩を心配してください。

今日は、独自のコンテンツ暗号化ツールを開発する方法をお教えします!

キーを生成する

まず、前に知っているように、非対称暗号化には2つの鍵があり、それらは互いに異なります。

1つは情報の暗号化に使用される公開鍵であり、もう1つは情報の復号化に使用される秘密鍵です。

'''
pip install pycryptodome
'''

from Crypto.PublicKey import RSA

key = RSA.generate(2048)
privateKey = key.export_key()
publicKey = key.publickey().export_key()

with open('private.pem', 'wb') as f:
    f.write(privateKey)

with open('public.pem', 'wb') as f:
    f.write(publicKey)

print('Private key saved to private.pem')
print('Public key saved to public.pem')
print('Done')

上記のコードは比較的単純です。最初CryptoにツールキットにモジュールをインポートしRSAて秘密鍵を生成します。次に、private.pemとpublic.pemの2つのファイルを取得します。

公開鍵の保存は後でデータの暗号化に使用され、秘密鍵の保存はデータの復号化に使用されます。

暗号化機能

まず、暗号化関数のコードを指定します。

def encrypt(dataFile, publicKeyFile):
    '''
    use EAX mode to allow detection of unauthorized modifications
    '''
    # read data from file
    with open(dataFile, 'rb') as f:
        data = f.read()
    
    # convert data to bytes
    data = bytes(data)

    # read public key from file
    with open(publicKeyFile, 'rb') as f:
        publicKey = f.read()
    
    # create public key object
    key = RSA.import_key(publicKey)
    sessionKey = os.urandom(16)

    # encrypt the session key with the public key
    cipher = PKCS1_OAEP.new(key)
    encryptedSessionKey = cipher.encrypt(sessionKey)

    # encrypt the data with the session key
    cipher = AES.new(sessionKey, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(data)
    []

    # save the encrypted data to file
    [ fileName, fileExtension ] = dataFile.split('.')
    encryptedFile = fileName + '_encrypted.' + fileExtension
    with open(encryptedFile, 'wb') as f:
        [ f.write(x) for x in (encryptedSessionKey, cipher.nonce, tag, ciphertext) ]
    print('Encrypted file saved to ' + encryptedFile)

次に、この機能について簡単に説明します。

この関数には、ファイルのパス情報公開鍵のファイルパスの2つの入力パラメーターがあります。

この関数を実行すると、プログラムはメッセージファイルを開き、データをバイトに変換します。また、公開鍵を開き、ランダムな値でセッション鍵を作成し、暗号化されたメッセージファイルに追加します。これは、誰かがファイルを変更しようとすると、ファイルを復号化できないことを意味します。

セッションキーを取得したら、公開キーを使用してセッションキーを暗号化します。

最後に、プログラムはセッションキーを使用してデータを暗号化し、暗号化されたセッションキー、ナンス、ラベル、および暗号文を保存します。

復号化機能

同様に、最初に復号化関数のコードを指定します。

def decrypt(dataFile, privateKeyFile):
    '''
    use EAX mode to allow detection of unauthorized modifications
    '''

    # read private key from file
    with open(privateKeyFile, 'rb') as f:
        privateKey = f.read()
        # create private key object
        key = RSA.import_key(privateKey)

    # read data from file
    with open(dataFile, 'rb') as f:
        # read the session key
        encryptedSessionKey, nonce, tag, ciphertext = [ f.read(x) for x in (key.size_in_bytes(), 16, 16, -1) ]

    # decrypt the session key
    cipher = PKCS1_OAEP.new(key)
    sessionKey = cipher.decrypt(encryptedSessionKey)

    # decrypt the data with the session key
    cipher = AES.new(sessionKey, AES.MODE_EAX, nonce)
    data = cipher.decrypt_and_verify(ciphertext, tag)

    # save the decrypted data to file
    [ fileName, fileExtension ] = dataFile.split('.')
    decryptedFile = fileName + '_decrypted.' + fileExtension
    with open(decryptedFile, 'wb') as f:
        f.write(data)

    print('Decrypted file saved to ' + decryptedFile)

復号化機能と暗号化機能の概念は同じですが、復号化機能の操作プロセスは暗号化とは逆です。

この記事で説明するファイルの暗号化と復号化のプロセスは、非対称暗号化では比較的基本的です。この記事が、一部のランサムウェアがデータを暗号化する方法とSSLが通信を暗号化する方法を理解するのに役立つことを願っています。興味があれば、自分で調べて、より高度な暗号化ツールを開発し、妹を暗号化することができます!

 こんにちは、皆さん、私の名前はジャックポップです。私はハルビン工業大学を修士号で卒業しました。私はHuaweiやAliなどの大きな工場で働いてきました。さらなる教育、雇用、技術改善について疑問がある場合は、友達を作るために:

https://mp.weixin.qq.com/s/fCHn8JpLQDH-M_QkVxwR1w

おすすめ

転載: blog.csdn.net/jakpopc/article/details/123961987