[Tep-j-general] Re: 暗号化と複合化がしたい!!

Back to archive index

Seiji Sogabe sogab****@alles*****
2006年 4月 29日 (土) 09:50:38 JST


曽我部です。

moon-****@nag***** wrote:
> openssl
>       OpenSSL support  enabled
>       OpenSSL Version  OpenSSL 0.9.7d 17 Mar 2004
> 
> 
> phpinfo()で確認したところ
> 上記のようになっていたので、使えるようです!!
> これは、どう使ってよいのでしょうか?
> 以下のマニュアルを見たのですが、初めて使うものでよく分かりません。
> 簡単でよいので、書き方を教えて頂けたらありがたいのですがm(_ _)m
> 

マニュアルの下のほうにあるUser Contributed Notesに使いかたが
書いてある場合があります。

openssl_public_encrypt()のところに書いてあるものを真似たものですが、
以下のようなソースでできるようです。
公開鍵、秘密鍵については、

 http://www.turbolinux.co.jp/knowledge/public/654.html

が参考になると思います。

どのような目的で、

> プログラムの中で、ある文字列の暗号化と、
> 別のプログラムの中で、暗号化された文字列をGETで受け取って複合化する

このようなことをするのでしょうか。WWWサーバとは別のサーバに
データを送信するのでしょうか?


<?php

// 公開鍵
define('FILE_PUBLIC_KEY',  'public.pem');
// 秘密鍵
define('FILE_PRIVATE_KEY', 'private.pem');
// パスフレーズ
define('PASSPHRASE', 'XXXXXXXXXX');

$data = '秘密のデータ';
$crypted_text = encrypt($data);
$decrypted = decrypt($crypted_text);

echo "暗号化前の文字列 = $data\n";
echo "暗号化された文字列 = $crypted_text\n";
echo "復号化された文字列 = $decrypted\n";

/**
 * 公開鍵で暗号化
 *
 * @param string $data 暗号化する文字列
 * @return string 暗号をbase64でエンコードした文字列
 */
function encrypt($data)
{
    // 公開鍵取得
    $fp = fopen(FILE_PUBLIC_KEY, 'r');
    $cert = fread($fp, 8192);
    fclose($fp);

    // 暗号化
    openssl_public_encrypt($data, $crypted, $cert);

    return base64_encode($crypted);
}

/**
 * 秘密鍵で復号化
 *
 * @param string $crypted_text 暗号をbase64でエンコードした文字列
 * @return string 復号化した文字列
 */
function decrypt($crypted_text)
{
    $crypted = base64_decode($crypted_text);

    // 秘密鍵取得
    $fp = fopen(FILE_PRIVATE_KEY, 'r');
    $priv_key = fread($fp, 8192);
    fclose($fp);
    $res = openssl_get_privatekey($priv_key, PASSPHRASE);

    // 復号化
    openssl_private_decrypt($crypted, $decrypted, $res);

    return $decrypted;
}

?>

-- 
sogab****@alles*****




Tep-j-general メーリングリストの案内
Back to archive index