PHPとIOSでopensslを使用してpdfファイルを暗号化、復号する


1.opensslとは?
OpenSSLはSSLだけではありません.メッセージの要約、ファイルの暗号化と復号化、デジタル証明書、デジタル署名、ランダムな数値を実現できます.OpenSSLライブラリに関する内容は非常に多く、文章が収容できるものではありません.
OpenSSLはAPIだけでなく、コマンドラインツールです.コマンド・ライン・ツールは、APIと同様の作業を完了し、さらにSSLサーバとクライアントをテストできます.
 
2.openssl enc用法:openssl enc-ciphername[-in filename][-out filename][-pass arg][-e][-d][-a][-k password][-kfile filename][-K key][-iv IV][-p]
[-P] [-bufsize number] [-debug] 
説明:
対称暗号化アルゴリズムツール.データを異なる対称暗号化アルゴリズムで復号化できます.暗号化/暗号化も可能であり、結果をbase 64符号化も可能である.OPTIONS-in filenameで暗号化/復号する入力ファイルです.デフォルトは標準入力です.-out filename暗号化/復号化する出力ファイル.デフォルトは標準出力です.-pass arg入力ファイルにパスワード保護がある場合は、ここにパスワードを入力します.-saltはopenssl 0.9.5以降のバージョンは互換性があり、このoptionをセットしなければならない.saltは多分また暗号学の中の1つの用語で、具体的に何をしているのか私もよく分かりません.私の理解では、これは暗号化後にパスワードの一番前に置かれた文字列であり、用途も解読を難しくするためである.もし理解が間違っていたら、暗号学の達人に指摘してください.-nosaltとopenssl 0.9.5以前のバージョンは互換性があり、setというoption-eのデフォルトsetのoptionについて、入力データを暗号化した.-d入力データを復号します.-a base 64符号化でデータを処理する.setこのoptionは、暗号化後のデータをbase 64で符号化してつまむ必要があり、復号化前にbase 64で符号化して復号することを示す.-k passwordは、以前のバージョンと互換性のある古いアイテムです.今は-keyで代わりました.-kfile filenameは同じでpassinに取って代わられます.-Kキーは16進数で表されるパスワードです.-ivIVの作用は完全に同等である.-p使用するパスワードを印刷します.-Pは同じですが、印刷が終わったらすぐに終了します.-bufsize number I/O操作のバッファサイズ-debug印刷デバッグ情報を設定します. 
 
 
3.PHPでopenssl encを使用してpdfファイルを暗号化する:
//16 byteの-kと-ivを生成
for( $i = 0 ; $i < 8 ; $i ++ )
{
    $pdfkey.= sprintf("%04X",substr($deviceid,$i,$i+1)); 
//1   4 16   }

$encrypy_cmd = "openssl enc -in $src2file -out $descfile -e -aes128 -salt -K $pdfkey -iv $pdfkey -nopad" ;
exec( $encrypy_cmd );

 
4.PHPでopenssl encを使用してpdfファイルを復号する
$encrypy_cmd1 = "openssl enc -in $descfile -out $descfile1 -d -aes128 -salt -K $pdfkey -iv $pdfkey -nopad" ;
exec( $encrypy_cmd1 );

 
5.iosでopenssl encを使用してpdfファイルを復号する
iosにはcocoaのNSTaskがないため、cocoa touch SDKでshellを実行するにはシステム呼び出しのみ
 int system(const char * string);
例えば、system(「ls」);
システムはシステムC関数なので、パラメータはNSStringを使用しないでください.
例:
#i nclude//systemを使用するには、このファイルを含める必要があります.
main()
{
system("openssl enc -in/var/www/symbian1/interface/nreader2/tmp/temp-enc1351760437.92931423.pdf -out/var/www/symbian1/interface/nreader2/tmp/temp-pdf1351760437.92931423.pdf -d -aes128 -salt -K 0000000C00EA0D80B26EDDD51A850315 -iv 0000000C00EA0D80B26EDDD51A850315 -nopad”);
}
添付:
 
System(shellコマンドを実行する)関連関数fork,execve,waitpid,popenヘッダファイル#i nclude定義関数int system(const char*string);関数説明system()はfork()を呼び出してサブプロセスを生成し、サブプロセスによって/bin/sh-c stringを呼び出してパラメータstring文字列に代表されるコマンドを実行します.このコマンド>は、実行が完了すると元の呼び出しのプロセスに戻ります.システム()の呼び出し中にSIGCHLD信号は一時的に保留され、SIGINT信号とSIGQUIT信号は無視されます.戻り値=-1:エラー=0:呼び出しに成功したがサブプロセスが現れなかった>0:終了に成功したサブプロセスのid
システム()が/bin/shの呼び出しに失敗した場合は127、その他の失敗原因は-1を返す.パラメータstringが空のポインタ(NULL)の場合、ゼロ以外の値が返されます.system()呼び出しが成功すると、shellコマンドを実行した後の戻り値が最後に返されますが、この戻り値はsystem()呼び出し/bin/sh失敗で返された127である可能性もありますので、errnoを再確認して実行成功を確認することが望ましいです.
もしfork()が失敗したら-1を返す:エラーが発生しexec()が失敗した場合はShellを実行できないことを示し、戻り値はShellがexitを実行したことに相当する(127)
 
実行が成功するとサブシェルの終了状態に戻る
 
システム()が/bin/shの呼び出しに失敗した場合は127、その他の失敗原因は-1を返す.パラメータstringが空のポインタ(NULL)の場合、ゼロ以外の値が返されます.system()呼び出しが成功すると、shellコマンドを実行した後の戻り値が最後に返されますが、この戻り値はsystem()呼び出し/bin/sh失敗で返された127である可能性もありますので、errnoを再確認して実行成功を確認することが望ましいです.
追加の説明SUID/SGID権限を持つプログラムを作成するときはシステム()を使用しないでください.システム()は環境変数を継承し、環境変数によってシステムの安全上の問題を引き起こす可能性があります.