PHP非对称RSA加密算法

1,350次阅读
没有评论

共计 1938 个字符,预计需要花费 5 分钟才能阅读完成。

非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。

以甲要把信息发给乙为例,首先确定角色:甲为加密者,乙为解密者。首先由乙随机确定一个 KEY,称之为密匙,将这个 KEY 始终保存在机器 B 中而不发出来;然后,由这个 KEY 计算出另一个 KEY,称之为公匙。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给甲,甲收到公钥后,利用公钥对信息加密,并把密文通过网络发送到乙,最后乙利用已知的私钥,就对密文进行解码了。以上就是 RSA 算法的工作流程。

分为两种情况

  • %E7%A7%81%E9%92%A5%E8%A7%A3%E5%AF%86″ class=”reference-link” href=”#”> 公钥加密 => 私钥解密

    class RSA
    {
      /**
       * 使用公钥加密
       *
       * @static
       * @param string $str       要加密的字符串
       * @param string $publicKey 公钥文件内容
       * @return string
       */
      public static function encryptWithPublicKey(string $str, string $publicKey)
      {
          $encrypted = '';
          $publicKey = openssl_pkey_get_public($publicKey);
          openssl_public_encrypt($str, $encrypted, $publicKey);
    
          return base64_encode($encrypted);
      }
    
      /**
       * 使用私钥解密 - 用于解密公钥加密的数据
       *
       * @static
       * @param string $str        要解密的数据
       * @param string $privateKey 私钥文件内容
       * @return string
       */
      public static function decryptWithPrivateKey(string $str, string $privateKey)
      {
          $decrypted  = '';
          $privateKey = openssl_pkey_get_private($privateKey);
          openssl_private_decrypt(base64_decode($str), $decrypted, $privateKey);
    
          return $decrypted;
      }
    }
  • %E5%85%AC%E9%92%A5%E8%A7%A3%E5%AF%86″ class=”reference-link” href=”#”> 私钥加密 => 公钥解密

    class RSA
    {
       /**
       * 使用私钥加密
       *
       * @static
       * @param string $str        要加密的字符串
       * @param string $privateKey 私钥文件内容
       * @return string
       */
      public static function encryptWithPrivateKey(string $str, string $privateKey)
      {
          $encrypted  = '';
          $privateKey = openssl_pkey_get_private($privateKey);
          openssl_private_encrypt($str, $encrypted, $privateKey);
    
          return base64_encode($encrypted);
      }
    
      /**
       * 使用公钥解密 - 用于解密私钥加密的数据
       *
       * @static
       * @param string $str       要解密的数据
       * @param string $publicKey 公钥文件内容
       * @return string
       */
      public static function decryptWithPublicKey(string $str, string $publicKey)
      {
          $decrypted = '';
          $publicKey = openssl_pkey_get_public($publicKey);
          openssl_public_decrypt(base64_decode($str), $decrypted, $publicKey);
    
          return $decrypted;
      }
    }

标签:PHP
RSA
加密

文章来源: PHP 非对称 RSA 加密算法

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2022-11-20发表,共计1938字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)