最近忙着做竞赛项目,现在搞的是用PHP写一个CGI的程序。功能是和网页控件进行交互,对网页的数据进行加密解密的功能。
本想这调用PHP内置的openssl函数完成这些功能的,结果发现PHP每次调用openssl时网页会假死,导致无法完成功能。这个问题google了好久,至今也没有发现有人遇见类似的状况。问了别人,发现他们都是在linux平台下进行的开发,所以推断是平台兼容性的问题。
由于项目时间紧张,没有时间详细分析这些源代码,所以只能采用其他的方式解决。
从php手册上看见了一个开源代码网站,找到了一个以openssl为标准所创建的开源库,贴上链接:http://phpseclib.sourceforge.net/
按照他的demo代码,导入库,完成相应功能。贴上我的PHP代码
<?php
$plaintext = "hehe";
include('Crypt/RSA.php');
echo "<p>".$plaintext."</p>";
$rsa = new Crypt_RSA();
$fp=fopen("svr_public_key.pem","r"); //pksc#1的公钥文件
$pub_key=fread($fp,8192);
fclose($fp);
$rsa->loadKey($pub_key); // public key
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
echo "<p>".$ciphertext."</p>";
$rsa2 = new Crypt_RSA();
$rsa2->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$fp=fopen("svr_pravite_key.pem","r"); //pksc#1的私钥文件
$pub_key=fread($fp,8192);
fclose($fp);
$rsa2->loadKey($pub_key); // private key
$deciphertext=$rsa2->decrypt($ciphertext);
echo "<p>".$deciphertext."</p>";
?>
由此,顺利完成公钥加密,私钥解密。
微吐槽一句,这个库真心不错呀!
接下来会继续对这个库进行使用和分析,下回分解!