Openssl加密算法实现

可以使用openssL 来生成两个pem密钥文件

可实现:
1、可以公钥加密,私钥解密,
2、 私钥加密,公钥解密

以下的案例是就是 公钥加密,私钥解密

<?php

class AlipayRsa{
    
    private static $PRIVATE_KEY;
    private static $PUBLIC_KEY;
    
    public function __construct($private_path,$public_path){
        self::$PRIVATE_KEY=$this->getPrivateStr($private_path);
        self::$PUBLIC_KEY=$this->getPublicStr($public_path);;
    }
    /*
     *返回openssl格式的私钥
     */
     public function getPrivateKey(){
        $privKey=self::$PRIVATE_KEY;
        return openssl_get_privatekey($privKey);
     }
    /*
     *返回openssl格式的公钥
     */
     public function getPublicKey(){
        $pubKey=self::$PUBLIC_KEY;
        
        return openssl_pkey_get_public($pubKey);
     }
    
    /*
     *私钥解密
     */
    public function privDecrypt($encrypted){
            
        if(!is_string($encrypted)){
            return null;
        }
        $encrypted = str_replace(array('-','_'),array('+','/'),$encrypted);
        $mod4 = strlen($encrypted) % 4;
        if ($mod4) {
           $encrypted .= substr('====', $mod4);
        }
        return openssl_private_decrypt(base64_decode($encrypted),$decrypted,$this->getPrivateKey())? $decrypted : null;
    }
    /*
     *公钥加密
     *因为有的实际项目中,路由规则会对 / 进行键-值的解析,所以要对 base64_encode 加密过后的 /、+、= 等进行替换
     */
    public function pubEncrypt($data){
        if(!is_string($data)){
            return null;
        }
        $data = openssl_public_encrypt($data,$encrypted,$this->getPublicKey())? base64_encode($encrypted) : null;
        return str_replace(array('+','/','='),array('-','_',''),$data);

    }
    
    
    /*
     *获得公钥
     */
    public function getPublicStr($publicPath){
        $publicStr=file_get_contents($publicPath);
        return $publicStr;
    }
    /*
     *获得私钥
     */
    public function getPrivateStr($privatePath){
        $privateStr=file_get_contents($privatePath);
        return $privateStr;
    }
}

?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容