登录 |  注册 |  繁體中文


PHP使用证书对数据进行签名、验签、加密、解密

分类: php 颜色:橙色 默认  字号: 阅读(2631) | 评论(0)
<?php
/**
    *    对数据进行签名
    *    $data = "This is site php3.cn"; 签名数据
    *    $privatekeyFile = "/path/to/private.key"; 私钥
    *    $passphrase = ; 密码
    */
    function sign($data, $privatekeyFile, $passphrase) 
    {  
        // 加载私钥
        $privatekey = openssl_pkey_get_private(file_get_contents($privatekeyFile), $passphrase);
       
        $algo = OPENSSL_ALGO_SHA1; //签名算法
        openssl_sign($data, $signature, $privatekey, $algo);
        
        openssl_free_key($privatekey);//释放内存
        return base64_encode($signature);
    }

   

    /**
    *    验签
    *    $data = "This is site php3.cn";
    *    $publickeyFile = "/path/to/public.key"; 公钥
    */
    function verify($data, $signature, $publickeyFile) 
    {
        
        $algo = OPENSSL_ALGO_SHA1;// 签名的算法,同上面一致
        
        $publickey = openssl_pkey_get_public(file_get_contents($publickeyFile));// 加载公钥
        
        // 验签
        $verify = openssl_verify($data, base64_decode($signature), $publickey, $algo);
        openssl_free_key($publickey);
        return $verify; // int(1)表示验签成功
    }
    /**
    *    加密
    *    $data = "This is site php3.cn";
    *    $publickeyFile = "/path/to/public.key"; 公钥
    */
    function encrypt($data, $publickeyFile)
    {
        // 加载公钥
        $publickey = openssl_pkey_get_public(file_get_contents($publickeyFile));
        // 使用公钥进行加密
        $encryptedData = ;
        openssl_public_encrypt($data, $encryptedData, $publickey);
        return base64_encode($encryptedData);
    }

    

    /**
    *    解密
    *    $encryptedData 待解密数据
    *    $privatekeyFile = /path/to/private.key; 私钥
    *    $passphrase = ; 密码
    */
    function decrypt($encryptedData, $privatekeyFile, $passphrase)
    {
        // 加载私钥
        $privatekey = openssl_pkey_get_private(file_get_contents($privatekeyFile), $passphrase);
        // 使用公钥进行加密
        $sensitiveData = ;
        openssl_private_decrypt(base64_decode($encryptedData), $sensitiveData, $privatekey);
        return $sensitiveData; // 应该跟$data一致
    }

 




姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部