本文实例讲述了ThinkPHP实现的rsa非对称加密类。分享给大家供大家参考,具体如下:
公钥加密后的字符串是一直变化的,但是用私钥解密后的内容仍然是相同的,这是为了加密数据使用的。
私钥加密的字符串是不会变化的,即使暴露在外网上别人截取时如果没有公钥也是看不出来内容的,仅允许给予公钥的第三方来解密并看到内容,实际作用相当于签名功能,如果能拿到未加密的内容,说明一定是信任方的数据,因为有他的签名啊。
其实这种非对称加密技术可以用于单点登录中去,安全级别高,能解密获取到内容应该就是信任方的数据。
<"\n"; file_put_contents('/tmp/shiyf.log', $myinfo, FILE_APPEND); //生成resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false $privatekey = openssl_pkey_get_private($privatekey); if (empty($privatekey)) { $result['msg'] = '密钥不可用'; } $encryptData = ''; //用私钥加密 if (openssl_private_encrypt($data, $encryptData, $privatekey)) { $result['msg'] = base64_encode($encryptData); $result['status'] = 1; } else { $result['msg'] = '加密失败!'; } return $result; } /** * 用公钥解密数据 * @param $data string 需要解密的字符串(最好不要超过200个字符) * @param $appName string 应用名称 */ public static function publicDecrypt($data, $appName) { $result = ['status'=>0, 'msg'=>'']; $data = base64_decode($data); $publickey = C($appName.'.PUBLIC_KEY'); //生成resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false $publickey = openssl_pkey_get_public($publickey); if (empty($publickey)) { $result['msg'] = '公钥不可用'; } //解密数据 $decryptData = ''; if (openssl_public_decrypt($data, $decryptData, $publickey)) { $result['msg'] = $decryptData; $result['status'] = 1; } else { $result['msg'] = '解密失败'; } return $result; } /** * 用公钥加密数据 * @param $data string 需要加密的字符串(最好不要超过200个字符) * @param $appName string 应用名称 */ public static function publicEncrypt($data, $publickey) { $result = ['status'=>0, 'msg'=>'']; //生成resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_private函数返回false $publickey = openssl_pkey_get_public($publickey); if (empty($publickey)) { $result['msg'] = '公钥不可用'; } $encryptData = ''; //用私钥加密 if (openssl_public_encrypt($data, $encryptData, $publickey)) { $result['msg'] = base64_encode($encryptData); $result['status'] = 1; } else { $result['msg'] = '加密失败!'; } return $result; } /** * 用私钥加密数据 * @param $data string 需要解密的字符串(最好不要超过200个字符) * @param $appName string 应用名称 */ public static function privateDecrypt($data, $appName) { $result = ['status'=>0, 'msg'=>'']; $data = base64_decode($data); $privatekey = C($appName.'.PRIVATE_KEY'); //生成resource类型的私钥,如果私钥文件内容被破坏,openssl_pkey_get_public函数返回false $privatekey = openssl_pkey_get_private($privatekey); if (empty($privatekey)) { $result['msg'] = '私钥不可用'; } //解密数据 $decryptData = ''; if (openssl_private_decrypt($data, $decryptData, $privatekey)) { $result['msg'] = $decryptData; $result['status'] = 1; } else { $result['msg'] = '解密失败'; } return $result; } }
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode
文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。