PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)

大家可以先到http://web.chacuo.net/netrsakeypair这个网站,在线生成公钥和私钥

RSA非对称加密算法,如果是公钥加密,就得用私钥解密,反过来也一样,私钥加密的就用公钥解密,以下是相关实现函数

/**
 * RSA私钥加密
 * @param string $private_key 私钥
 * @param string $data 要加密的字符串
 * @return string $encrypted 返回加密后的字符串
 * @author mosishu
 */
function privateEncrypt($private_key,$data){
 $encrypted = '';
 $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
 //最大允许加密长度为117,得分段加密
 $plainData = str_split($data, 100);//生成密钥位数 1024 bit key
 foreach($plainData as $chunk){
  $partialEncrypted = '';
  $encryptionOk = openssl_private_encrypt($chunk,$partialEncrypted,$pi_key);//私钥加密
  if($encryptionOk === false){
   return false;
  }
  $encrypted .= $partialEncrypted;
 }

 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
 return $encrypted;
}
/**
 * RSA公钥解密(私钥加密的内容通过公钥可以解密出来)
 * @param string $public_key 公钥
 * @param string $data 私钥加密后的字符串
 * @return string $decrypted 返回解密后的字符串
 * @author mosishu
 */
function publicDecrypt($public_key,$data){
 $decrypted = '';
 $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
 $plainData = str_split(base64_decode($data), 128);//生成密钥位数 1024 bit key
 foreach($plainData as $chunk){
  $str = '';
  $decryptionOk = openssl_public_decrypt($chunk,$str,$pu_key);//公钥解密
  if($decryptionOk === false){
   return false;
  }
  $decrypted .= $str;
 }
 return $decrypted;
}
//RSA公钥加密
function publicEncrypt($public_key,$data){
 $encrypted = '';
 $pu_key = openssl_pkey_get_public($public_key);
 $plainData = str_split($data, 100);
 foreach($plainData as $chunk){
  $partialEncrypted = '';
  $encryptionOk = openssl_public_encrypt($chunk,$partialEncrypted,$pu_key);//公钥加密
  if($encryptionOk === false){
   return false;
  }
  $encrypted .= $partialEncrypted;
 }
 $encrypted = base64_encode($encrypted);
 return $encrypted;
}
//RSA私钥解密
function privateDecrypt($private_key,$data){
 $decrypted = '';
 $pi_key = openssl_pkey_get_private($private_key);
 $plainData = str_split(base64_decode($data), 128);
 foreach($plainData as $chunk){
  $str = '';
  $decryptionOk = openssl_private_decrypt($chunk,$str,$pi_key);//私钥解密
  if($decryptionOk === false){
   return false;
  }
  $decrypted .= $str;
 }
 return $decrypted;
}

以上这篇PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • php rsa加密解密使用详解
  • PHP rsa加密解密使用方法
  • PHP的RSA加密解密方法以及开发接口使用
  • php实现RSA加密类实例
(0)

相关推荐

  • PHP rsa加密解密使用方法

    php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 o

  • php rsa加密解密使用详解

    1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: 复制代码 代码如下: openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out

  • PHP的RSA加密解密方法以及开发接口使用

    网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的.本人提倡经过接口的数据都要进行加密解密之后进行使用. 这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下. 简单介绍RSA RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新手对它不太了解.下面仅作简要介绍.RSA是第一个比较完善的公开密钥算法,它既能

  • php实现RSA加密类实例

    本文实例讲述了php实现RSA加密类.分享给大家供大家参考.具体分析如下: 通过openssl实现的签名.验签.非对称加解密,需要配合x.509证书(如crt和pem)文件使用. 由于各种原因,该类并不十分完善,欢迎各种测试! <?php /** * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流 * 填充方式: PKCS1Padding(加解密)/NOPadding(解密) * * Notice:Only accepts a single block. B

  • PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)

    大家可以先到http://web.chacuo.net/netrsakeypair这个网站,在线生成公钥和私钥 RSA非对称加密算法,如果是公钥加密,就得用私钥解密,反过来也一样,私钥加密的就用公钥解密,以下是相关实现函数 /** * RSA私钥加密 * @param string $private_key 私钥 * @param string $data 要加密的字符串 * @return string $encrypted 返回加密后的字符串 * @author mosishu */ fun

  • Java实现的RSA加密解密算法示例

    本文实例讲述了Java实现的RSA加密解密算法.分享给大家供大家参考,具体如下: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.

  • 详细分析JAVA加解密算法

    加解密算法分析 日常开发中,无论你是使用什么语言,都应该遇到过使用加解密的使用场景,比如接口数据需要加密传给前端保证数据传输的安全:HTTPS使用证书的方式首先进行非对称加密,将客户端的私匙传递给服务端,然后双方后面的通信都使用该私匙进行对称加密传输:使用MD5进行文件一致性校验,等等很多的场景都使用到了加解密技术. 很多时候我们对于什么时候要使用什么样的加解密方式是很懵的.因为可用的加解密方案实在是太多,大家对加解密技术的类型可能不是很清楚,今天这篇文章就来梳理一下目前主流的加解密技术,本篇文

  • .NET中常见的加解密算法详解

    目录 一.MD5不可逆加密 1.校验密码 2.防篡改 3.急速秒传 4.源代码管理工具 二.对称可逆加密 三.非对称可逆加密 一.MD5不可逆加密 不可逆加密是指将原文加密成密文以后,无法将密文解密成原文. MD5的算法是公开的,无论是哪种语言,只要需要加密的字符串是相同的,那么经过MD5加密以后生成的结果都是一样的. .NET框架中已经帮我们实现好了MD5加密,请看下面的例子: using System; using System.Collections.Generic; using Syst

  • python实现AES和RSA加解密的方法

    本文实例为大家分享了python实现AES和RSA加解密的具体代码,供大家参考,具体内容如下 AES AES 是一种对称加密算法,用key对一段text加密,则用同一个key对密文解密, from Crypto import Random from Crypto.Hash import SHA from Crypto.Cipher import AES from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Crypto.Si

  • php的RSA加密解密算法原理与用法分析

    本文实例讲述了php的RSA加密解密算法原理与用法.分享给大家供大家参考,具体如下: 最近因为工作的需要,要倒腾支付宝支付相关的知识,因为支付宝应用了RSA加密机制,个人对此并不了解,所以在这里写下一篇总结. 1.生成公钥和私钥 要应用RSA算法,必须先生成公钥和私钥,公钥和私钥的生成可以借助openssl工具. 本次测验是在windows下进行的,可以到以下的地址下载windows安装包:http://gnuwin32.sourceforge.net/packages/openssl.htm,

  • Python 实现RSA加解密文本文件

    近来在使用python写项目,特此记录一下项目中遇到的文件加解密问题. 关于python版本的加密算法,随便搜一搜还是可以检索出来很多的,不过大都是同一篇文章在不同的平台来回发布,或者就是转载,而且例举的都是最简单的情况,那么,实际项目中使用的话,肯定会比这个要稍微复杂一些,比如我的需求就是要加密一个使用mysqldump出来的数据库脚本文件,直接拿网上的例子过来调用肯定是不行的,所以不得不自己研究了一番,特此记录. RSA算法 什么是RSA算法? 项目选型的算法是RSA非对称加密算法,关于这个

  • Flutter RSA加密解密的示例代码

    目录 对称加密 非对称加密 第一步.首先pubspec.yaml中添加依赖 第二步.获取公钥私钥文件 第三步.在pubspec.yaml文件中添加公钥私钥文件. 第四步.实现Encrypt加密解密工具类 第五步.使用Encrypt工具类实现加密 第六步.项目实际需求, 第七步.关于秘钥的格式(非常重要) 第八步.使用Encrypt具类实现加密 数据加密有对称加密(对称密钥方案) 和非对称加密(公钥加密) 两种加密方式. 对称加密 在对称加密算法中,加密和解密密钥是相同的.通信双方必须具有相同的密

  • Go语言实现Sm2加解密的示例代码

    在 Go 语言中,可以使用 github.com/tjfoc/gmsm/sm2 包来实现 SM2 加密和解密. 示例代码如下: package main import (     "fmt"     "crypto/rand"     "encoding/hex"     "github.com/tjfoc/gmsm/sm2" ) func main() {     // 生成密钥对     priKey, err := sm

  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    前言 我们在Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都是收费的),成本较高.那么问题来了,如果对web提交的敏感数据进行加密呢?web应用中,前端的数据处理和交互基本上都是靠javascript来完成,后台的逻辑处理可以C#(java)等进行处理. 微软的C#中虽然有RSA算法,但是格式和OpenSSL生成的公钥/私钥文件格式并不兼容.这个

随机推荐