RSA验证

本文介绍如何使用PHP的openssl扩展来实现RSA算法的公钥加密、私钥解密及数字签名验证的过程,并提供了完整的代码示例。

// -----------创建公钥和私钥

$ config = array(
//“digest_alg”=>“sha512”,
“private_key_bits”=> 512,//字节数512 1024 2048 4096等
“private_key_type”=> OPENSSL_KEYTYPE_RSA,//加密类型
);

//创建公钥和私钥返回资源
$ res = openssl_pkey_new($ config);

//从得到的资源中获取私钥并把私钥赋给$ <span style =“font-family:Arial,Helvetica,sans-serif;”> privKey </ span>
openssl_pkey_export($ res,$ privKey);

// <span style =“font-family:Arial,Helvetica,sans-serif;”>从得到的资源中获取公钥</ span> <span style =“font-family:Arial,Helvetica,sans-serif; “> $ pubKey </ span> <span style =”font-family:Arial,Helvetica,sans-serif;“>
echo'</ span>'; $ pubKey = openssl_pkey_get_details($ res);

$ pubKey = $ pubKey [“key”];

//后续代码的var_dump($的的privKey);
//后续代码var_dump($ PUBKEY);
的var_dump(阵列('的privKey'=> $的privKey,'PUBKEY'=> $ PUBKEY));

// ------------------------------

注:窗下需开启PHP扩展php_opensll

Linux的的下默认开启

// --------------验证类创建-----------------

class Rsa
{ 
    / ** 
     * RSA签名
     * @参数$ data 
     签名数据* @param $ private_key_path商户私钥文件路径
     *返回
    签名结果
     * / 函数rsaSign($ data,$ private_key_path){ 
        $ priKey = file_get_contents($ private_key_path ); 
        $ res = openssl_get_privatekey($ priKey); 
        openssl_sign($ data,$ sign,$ res); 
        openssl_free_key($水库); 
        // base64编码
        $ sign = base64_encode($ sign); 
        返回$符号; 
    } 

    / ** 
     * RSA签名
     * @param $ data待
     签名数据* @param $ ali_public_key_path支付宝的公钥文件路径
     * @param $ sign要校对的签名结果
     *返回验证结果
     * / 
    函数rsaVerify($ data,$ ali_public_key_path,$ sign){ 
        $ pubKey = file_get_contents($ ali_public_key_path); 
        $ res = openssl_get_publickey($ pubKey); 
        $ result =(bool)openssl_verify($ data,base64_decode($ sign),$ res); 
        openssl_free_key($水库); 
        返回$ result; 
    } 
    函数rsaEncrypt($ content,$ public_key_path){ 
        $ pubKey = file_get_contents($ public_key_path); 
        $ res = openssl_get_publickey($ pubKey); 
        //把需要加密的内容,按128位拆开解密
        $ result =''; 
        for($ i = 0; $ i <strlen($ content)/ 128; $ i ++){ 
            $ data = substr($ content,$ i * 128,128);
            openssl_public_encrypt($ data,$ encrypt,$ res); 
            $ result。= $ encrypt; 
        } 
        $ result = base64_encode($ result); 
        openssl_free_key($水库); 
        返回$ result; 
    } 
    / ** 
     * RSA解密
     * @param $内容需要解密的内容,密文
     * @param $ private_key_path商户私钥文件路径
     *返回解密后内容,明文
     * / 
    函数rsaDecrypt($ content,$ private_key_path){ 
        $ priKey = file_get_contents($ private_key_path); 
        $ res = openssl_get_privatekey($ priKey); 
        //用的base64将内容还原成二进制
        $ content = base64_decode($ content); 
        //把需要解密的内容,按128位拆开解密
        $ result =''; 
        for($ i = 0; $ i <strlen($ content)/ 128; $ i ++){ 
            $ data = substr($ content,$ i * 128,128); 
            openssl_private_decrypt($ data,$ decrypt,$ res); 
            $ result。= $ decrypt; 
        } 
        openssl_free_key($水库); 
        返回$ result; 
    } 
} 
// -------------------调用验证类------------------------ -
require_once“Rsa.php”; 
标题(“内容类型:文本/ HTML;字符集='UTF-8”); 

定义(“PRIVATE_KEY”,“./ private_key.pem”); 
定义(“PUBLIC_KEY”,“。 / pub_key.pem“); 
$ rsa = new Rsa(); 

$ msg =”我的爱是巧合。“; 
// RSA加密演示
$ encrypt = $ rsa-> rsaEncrypt($ msg,PUBLIC_KEY);
echo“<p> Tom使用Bob的公钥加密之后的数据为:<br/> $ encrypt <br/> </ p> <hr />”;
// RSA解密演示
$ decrypt = $ rsa-> rsaDecrypt($ encrypt,PRIVATE_KEY);
echo“<p> Bob得到了上述加密数据,使用自己的私钥解密后的结果为:<br/> $ decrypt </ p> <hr />”;
// RSA生成数字签名演示
$ sign = $ rsa-> rsaSign($ msg,PRIVATE_KEY);
echo“Bob在传输数据时,使用自己的私钥生成的数字签名为:$ sign </ p> <hr />”;
// RSA验证数字签名演示
$ verify = $ rsa-> rsaVerify($ msg,PUBLIC_KEY,$ sign);
echo“Tom使用Bob的公钥验证的结果为:</ p>”;
后续代码var_dump($验证);

 

在 Linux 系统中进行 RSA 验证通常是指通过 SSH 协议使用 RSA 密钥对进行身份认证,以实现安全的远程登录或文件传输。以下是实现 RSA 验证的具体方法: ### 生成 RSA 密钥对 使用 `ssh-keygen` 工具生成 RSA 密钥对是第一步。可以通过以下命令生成: ```bash ssh-keygen -t rsa ``` 此命令会提示用户选择保存密钥的路径(默认为 `~/.ssh/id_rsa`)和设置密码(可选)。完成后,会在用户的 `.ssh` 目录下生成两个文件:`id_rsa`(私钥)和 `id_rsa.pub`(公钥)[^1]。 ### 配置远程服务器以支持 RSA 认证 为了使远程服务器接受基于 RSA 的身份验证,需要确保其 SSH 配置文件 `/etc/ssh/sshd_config` 中包含以下设置: ```bash PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ``` 这些设置启用公钥身份验证并指定公钥存储的位置。如果对配置进行了修改,需要重启 SSH 服务以应用更改: ```bash sudo systemctl restart sshd ``` ### 将公钥添加到远程服务器 将本地生成的公钥(`id_rsa.pub`)添加到远程服务器的 `~/.ssh/authorized_keys` 文件中。可以手动复制公钥内容到远程服务器的该文件中,或者使用 `ssh-copy-id` 命令简化这一过程: ```bash ssh-copy-id user@remote_host ``` ### 测试 RSA 认证 最后,尝试通过 SSH 登录远程服务器以验证 RSA 认证是否成功: ```bash ssh user@remote_host ``` 如果一切配置正确,且未为私钥设置密码或已正确输入密码,则应该能够成功登录而无需输入账户密码。 ### 注意事项 - 保持私钥的安全非常重要。不应与他人共享,并且应避免将其上传至公共仓库。 - 如果私钥设置了密码,每次使用时都需要输入该密码,除非使用了 SSH 代理(如 `ssh-agent`)来缓存凭证。 - 定期检查 `~/.ssh/authorized_keys` 文件,确保只有授权的公钥存在其中。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值