2017-05-26 18 views
1

私はPerlの文字列を暗号化および復号化するアルゴリズムを作成しました(CFBモードのAESを使用)。今私はファイルレベルの暗号化にも拡張したいと思っています。ファイルの内容をどのように取得する必要がありますか?良いアプローチは何でしょうか?Perlのファイルを暗号化します

  1. 次に、どのように私は、ファイルの内容を保存する必要があるのbinmode
    open(my $fh, "<", "myTestFile.ext"); binmode $fh

をファイルを読む通常
open(my $fh, "<", "myTestFile.ext");

  • ファイルを読みますか?

    A)1つの文字列内のファイルのすべての内容を読み、実装プログラム

    my $document = do { 
        local $/ = undef; 
        <$fh>; # file handle opened previously 
    }; 
    encryptionAlgorithm($document); 
    

    b)は、行毎にファイルの内容を読み取るための文字列を提供

    while(my $line = <$fh>) 
    { 
        encryptionAlgorithm($line); 
    } 
    

    でどちらの場合も私は\nさんのほうがいいですか?

  • 答えて

    2

    AESは128ビット(16バイト)のブロックを暗号化しますので、一度に16バイトずつファイルを読み取る必要があります。私は、ファイルを開いた後or die $!を追加しました

    open my $fh, '<', 'myTestFile.ext' or die $!; 
    binmode $fh; 
    
    while (read($fh,my $block,16)) { 
        # encrypt $block 
    } 
    

    注:これを行うには、あなたがしてread組み込みでそれを読んで、あなたのファイルをbinmodeする必要があなたは常に確認するあなたのopenが働いていました。

    また、読み込んだブロックの長さが16バイト未満の場合は、いくつかのパディングを行う必要があることを忘れないでください。 (私はブロックはAESのために埋められているか覚えていませんが、私はあなたがそれを実装しているので、あなたが信頼して)あなたが考えるアプローチについて


    • ファイル全体を読みますファイルが大きければすぐに多くのメモリを消費する可能性があります。

    • ファイルを1行ずつ読み込み:ファイルに改行が含まれていない場合は、一度に完全に読み込むため、多くのメモリが消費される可能性があります。行に16の倍数でないバイト数が含まれている場合は、異なる行のバイトを結合する必要があります。単純に16バイトのブロックを読み取るよりも多くの作業が必要になります。

    また、あなたは間違いなくchomp何にもしたくありません! decrypt(encrypt(file)) == fileが必要ですが、改行がchompの場合は、それ以上はなりません。

    +0

    説明と解決策をありがとうございました。私はこのトピックには新しく、私は学校のプロジェクトをしなければならない – Adrian

    関連する問題