openssl进行非对称加密和对称加密的php示例

确保开启php的openssl扩展:extension=php_openssl.dll

/**
 * @file
 * 作者:yunke url:http://blog.csdn.net/u011474028
 *
 */
header("Content-Type:text/html; charset=utf-8");

$key_file = "yunkeserver.key"; //私钥
$publickey_file = "yunkeserver.crt"; //证书文件
//$publickey_file="server.crt";//和私钥不匹配的证书文件
$data_file = "msg.txt"; //待加密数据文件

$private_key = openssl_get_privatekey(file_get_contents($key_file)); //获取私钥 非字符串类型  为资源类型
echo "私钥为:
" . $private_key . "

";
$public_key = openssl_get_publickey(file_get_contents($publickey_file)); //获取公钥 非字符串类型  为资源类型
echo "公钥为:
" . $public_key . "

";

/*
$str_key = ''; //KEY的字符串表示
if (openssl_pkey_export($private_key, $str_key)) { //需要正确配置openssl.cnf文件才可以成功
    echo "密钥的字符串表示为:
" . $str_key . "

";
} else {
    echo "密钥的字符串化失败:
";
    while ($msg = openssl_error_string()) {
        echo $msg . "
\n";
    }
    echo "
";
}
*/
 //print_r(openssl_pkey_get_details ( $public_key )); //输出密钥的详细信息 这里可以看出私钥里面是包含公钥的

$data = file_get_contents($data_file);
echo "明码数据为:
" . $data . "

";

$crypted_data = null; //密文
if (openssl_private_encrypt($data, $crypted_data, $private_key)) {
    echo "以下是私钥加密的密文:
" . $crypted_data . "

";
} else {
    echo "加密失败:
";
    while ($msg = openssl_error_string()) {
        echo $msg . "
\n";
    }
}
$decrypted_data = null; //加密还原后的明文
if (openssl_public_decrypt($crypted_data, $decrypted_data, $public_key)) {
    echo "以下是经过公钥解密后的明文:
" . $decrypted_data . "

";
} else {
    echo "解密失败:
";
    while ($msg = openssl_error_string()) {
        echo $msg . "
\n";
    }
}




//以上为非对称加密   以下演示对称加密

$key="123456"; //设置一个共享密码
$cipher='';//加密算法
$arr=openssl_get_cipher_methods(); //获取支持的加密算法 数组的key和值并没有对应关系
$cipher=$arr[20];
echo "选择的加密算法是:$cipher
\n";
$value=openssl_encrypt($data , $cipher,$key); //第四参数OPENSSL_RAW_DATA输出原始数据
echo "加密后的密文是:
".$value."

";
$old_data=openssl_decrypt ( $value,$cipher, $key);
echo "解密还原的明文:
".$old_data."

";

//print_r($arr);


































你可能感兴趣的:(php程序,字符编码,算法与设计,加密,openssl)