1.生成密钥和公钥

开始前需要准备openssl环境

linux 需要安装openssl工具包,传送门http://www.openssl.org/source/

window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html

密钥生成

openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度,具体参数请参考文档。

openssl genrsa -out rsa_private_key.pem 1024

-out 指定生成的密钥的文件名,生成的密钥文件为 rsa_private_key.pem ,密钥长度越长越安全,但加解密所耗时间亦变长。

PHP RSA公约私钥加密解密示例

公钥生成

Rsa命令用于处理Rsa密钥、格式转换和打印信息

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

-in filename:输入的RSA密钥文件,在此为上面生成的密钥 rsa_private_key.pem。

-pubout:设置此选项后,保存公钥值到输出文件中。

-out filename:输出文件,在此我们定义成rsa_public_key.pem

PHP RSA公约私钥加密解密示例

PHP用RSA加解密

开始之前需要准备将php.ini配置文件的;extension=php_openssl.dll 改为 extension=php_openssl.dll

<?php

$privateKeyFilePath = 'rsa_private_key.pem';

$publicKeyFilePath = 'rsa_public_key.pem';

extension_loaded('openssl') or die('php需要openssl扩展支持');

(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('文件路径不正确');

$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));

$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));

($privateKey && $publicKey) or die('密钥或者公钥不可用');

// 加密数据

$originalData = '我的帐号是:toutiao,密码是:123456';

// 加密以后的数据

$encryptData = '';

echo '原数据为:', $originalData, PHP_EOL;

///////////////////////////////用私钥加密////////////////////////

if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {

// 加密后 可以base64_encode后方便在网址中传输

echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;

} else {

exit('加密失败');

}

///////////////////////////////用公钥解密////////////////////////

//解密以后的数据

$decryptData ='';

if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {

echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;

} else {

exit('解密成功');

} 

PHP RSA加密解密的更多相关文章

  1. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  2. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  3. openssl evp RSA 加密解密

    openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...

  4. C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法

    因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...

  5. Cryptopp iOS 使用 RSA加密解密和签名验证签名

    Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网:https://www.cryptopp.com 以下主要演示Cryptopp 在iOS上的RSA加密解密签名与验证 ...

  6. C# Java间进行RSA加密解密交互

    原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...

  7. C# Java间进行RSA加密解密交互(二)

    原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...

  8. C# Java间进行RSA加密解密交互(三)

    原文:C# Java间进行RSA加密解密交互(三) 接着前面一篇C# Java间进行RSA加密解密交互(二)说吧,在上篇中为了实现 /** * RSA加密 * @param text--待加密的明文 ...

  9. RSA加密解密及数字签名Java实现--转

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...

  10. RSA加密解密和读取公钥、私钥

    /// <summary>     /// RSA加密解密及RSA签名和验证    /// </summary>     public class RSADE    {    ...

随机推荐

  1. UNIX环境高级编程 文件I/O

    大多数文件I/O 只需要用到 5个函数 :    open , read , write , lseek , close 本章描述的都是不带缓冲的I/O(read write 都调用内核中的一个系统调 ...

  2. Windows2012启动自动帐户登陆

    Win+R 启动 输入regedit  运行注册表 找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogo ...

  3. 写一个Python的windows服务

    1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 ...

  4. js缓动函数

    tween: { easeInQuad: function(pos){ return Math.pow(pos, 2); }, easeOutQuad: function(pos){ return - ...

  5. BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*

    BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 ...

  6. BZOJ4689 Find the Outlier 【高斯消元】*

    BZOJ4689 Find the Outlier Description Abacus教授刚刚完成了一个制作数表的计算引擎的设计.它被设计用于同时计算一个多项式在许多点的取值.例如对于多项式 f(x ...

  7. imsl库的使用过程中遇到的问题

    1,首先是安装,用的imsl7.0的库,网址:http://www.pipipan.com/file/87076708,里边有破解,但是这个安装文件只能装32位的,装不了64位的. 2,安装后找到lm ...

  8. LG3960 列队

    题意 传送门 分析 参照博客 树状数组+离线处理即可. 利用树状数组下标本质即可\(O(\log n)\)求第k大. 代码 #include<iostream> #include<c ...

  9. python: find the index of a given value in a list

    ["foo", "bar", "baz"].index("bar")

  10. exec 和 exec_

    exec_ 是six里面针对py2 , py3 兼容,  而做的重新定义.  和 exec 功能一样. 关键一点是:   exec 是一个语法声明,不是一个函数.  也就是说和if,for一样. ex ...