PHP RSA加解密示例

Aug 08, 2016 am 09:20 AM
key openssl private public

转自:http://orangeholic.iteye.com/blog/2161771
参考:http://blog.csdn.net/clh604/article/details/20224735
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
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,并输出文件名为private_key.pem的私钥,第三条根据私钥生成对应的RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给android跟ios等前端,反过来也可以,注意复制的时候只复制openssl后面的内容即可。

2.PHP用RSA加解密
开始前需要准备php openssl环境,开启PHP openssl扩展,window将php的配置文件php.ini中的
;extension=php_openssl.dll
改为
extension=php_openssl.dll

代码如下:

<code><span><span><?php </span><span>$private_key</span> = <span>'-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----END RSA PRIVATE KEY-----'</span>;

<span>$public_key</span> = <span>'-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----'</span>;

<span>//echo $private_key;</span><span>$pi_key</span> =  openssl_pkey_get_private(<span>$private_key</span>);<span>//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id</span><span>$pu_key</span> = openssl_pkey_get_public(<span>$public_key</span>);<span>//这个函数可用来判断公钥是否是可用的</span>
print_r(<span>$pi_key</span>);<span>echo</span><span>"\n"</span>;
print_r(<span>$pu_key</span>);<span>echo</span><span>"\n"</span>;


<span>$data</span> = <span>"aassssasssddd"</span>;<span>//原始数据</span><span>$encrypted</span> = <span>""</span>; 
<span>$decrypted</span> = <span>""</span>; 

<span>echo</span><span>"source data:"</span>,<span>$data</span>,<span>"\n"</span>;

<span>echo</span><span>"private key encrypt:\n"</span>;

openssl_private_encrypt(<span>$data</span>,<span>$encrypted</span>,<span>$pi_key</span>);<span>//私钥加密</span><span>$encrypted</span> = base64_encode(<span>$encrypted</span>);<span>//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的</span><span>echo</span><span>$encrypted</span>,<span>"\n"</span>;

<span>echo</span><span>"public key decrypt:\n"</span>;

openssl_public_decrypt(base64_decode(<span>$encrypted</span>),<span>$decrypted</span>,<span>$pu_key</span>);<span>//私钥加密的内容通过公钥可用解密出来</span><span>echo</span><span>$decrypted</span>,<span>"\n"</span>;

<span>echo</span><span>"---------------------------------------\n"</span>;
<span>echo</span><span>"public key encrypt:\n"</span>;

openssl_public_encrypt(<span>$data</span>,<span>$encrypted</span>,<span>$pu_key</span>);<span>//公钥加密</span><span>$encrypted</span> = base64_encode(<span>$encrypted</span>);
<span>echo</span><span>$encrypted</span>,<span>"\n"</span>;

<span>echo</span><span>"private key decrypt:\n"</span>;
openssl_private_decrypt(base64_decode(<span>$encrypted</span>),<span>$decrypted</span>,<span>$pi_key</span>);<span>//私钥解密</span><span>echo</span><span>$decrypted</span>,<span>"\n"</span>;</span></span></code>
Copier après la connexion

结果:

<code>原数据为<span>:</span>我的帐号是<span>:shiki</span>,密码是<span>:matata</span>
加密成功,加密后数据(base64_encode后)为<span>:X6q/u/hUW4o7z0tETaWuRt3ahvgT9/m+yiqABDDs9ccHRekB0YU9UAv5zA/VZawLoDVhiyl9bAc3WHeRIexz+gybUJKkI69RFkWHL5n3llfCeTdnSXIQ4Aa+ysfmCicxXwMeP2vUWZBcxJiRVLiGGe1shJjw/TxvmocOlaFRVnQ=</span>
解密成功,解密后数据为<span>:</span>我的帐号是<span>:shiki</span>,密码是<span>:matata</span></code>
Copier après la connexion

以上就介绍了PHP RSA加解密示例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment Nginx utilise la bibliothèque OpenSSL pour une communication plus sécurisée Comment Nginx utilise la bibliothèque OpenSSL pour une communication plus sécurisée Jun 10, 2023 pm 01:51 PM

Nginx est un logiciel largement utilisé dans les serveurs Web, les équilibreurs de charge, les proxys inverses et les caches. Lors de la transmission réseau, le cryptage et la sécurité des données font l’objet d’une attention croissante. Afin d'améliorer la sécurité des communications, la bibliothèque OpenSSL peut être utilisée pour implémenter le protocole SSL/TLS pour protéger la transmission de données sensibles. Cet article expliquera comment utiliser Nginx et la bibliothèque OpenSSL pour obtenir une communication plus sécurisée. Installez et configurez la bibliothèque OpenSSL. Tout d'abord, vous devez installer la bibliothèque OpenSSL sur le serveur. peut faire

Que signifie l'attribut d'identité dans SQL ? Que signifie l'attribut d'identité dans SQL ? Feb 19, 2024 am 11:24 AM

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

Comment SpringBoot surveille les événements de changement de clé Redis Comment SpringBoot surveille les événements de changement de clé Redis May 26, 2023 pm 01:55 PM

1. Présentation des fonctions La notification Keyspace permet aux clients de recevoir des événements qui modifient les modifications Rediskey d'une manière ou d'une autre en s'abonnant à des canaux ou à des modèles. Toutes les commandes qui modifient les touches clés. Toutes les clés qui ont reçu la commande LPUSHkeyvalue[value…]. Toutes les clés expirées dans la base de données. Les événements sont distribués via les fonctions d'abonnement et de publication de Redis (pub/sub), de sorte que tous les clients prenant en charge les fonctions d'abonnement et de publication peuvent utiliser directement la fonction de notification de l'espace de clé sans aucune modification. Parce que les fonctions actuelles d'abonnement et de publication de Redis adoptent une stratégie fireandforget, si votre programme

Comment générer un certificat SSL MySQL à l'aide d'OpenSSL Comment générer un certificat SSL MySQL à l'aide d'OpenSSL Sep 09, 2023 pm 02:12 PM

Introduction à l'utilisation d'OpenSSL pour générer un certificat SSL MySQL : MySQL est un système de base de données relationnelle largement utilisé. Il est très important d'utiliser le protocole SSL (SecureSocketsLayer) pour les communications cryptées dans les environnements de production réels. Cet article expliquera comment utiliser l'outil OpenSSL pour générer un certificat SSL MySQL et fournira des exemples de code correspondants. Étapes : Installer OpenSSL : Tout d’abord, assurez-vous qu’OpenSSL est installé sur votre ordinateur.

Quelle est la différence entre la version développeur et la version publique d'iOS ? Quelle est la différence entre la version développeur et la version publique d'iOS ? Mar 01, 2024 pm 12:55 PM

Chaque année, avant qu'Apple ne publie une nouvelle version majeure d'iOS et de macOS, les utilisateurs peuvent télécharger la version bêta plusieurs mois à l'avance pour en faire l'expérience en premier. Étant donné que le logiciel est utilisé à la fois par le public et par les développeurs, Apple a lancé des versions développeur et publique, qui sont des versions bêta publiques des versions bêta développeur, pour les deux. Quelle est la différence entre la version développeur et la version publique d’iOS ? Littéralement parlant, la version développeur est une version bêta développeur et la version publique est une version bêta publique. La version développeur et la version publique ciblent des publics différents. La version développeur est utilisée par Apple pour les tests par les développeurs. Vous avez besoin d'un compte développeur Apple pour la télécharger et la mettre à niveau.

Installation d'OpenBLAS sous CentOS 7 et installation de CentOS 7 OpenSSL Installation d'OpenBLAS sous CentOS 7 et installation de CentOS 7 OpenSSL Feb 10, 2024 am 11:45 AM

En tant que système d'exploitation open source, LINUX dispose d'un large éventail d'applications et de groupes d'utilisateurs. CentOS7 est une version dérivée de LINUX. Il est construit sur la base du code source de Red Hat Enterprise Linux (RHEL) et présente un haut degré de stabilité et de sécurité. . Il peut être installé et configuré sur CentOS7. OpenBLAS et OpenSSL sont des besoins courants de nombreux développeurs et administrateurs système. Cet article détaillera comment installer et configurer OpenBLAS et OpenSSL sur CentOS7. OpenBLAS est une bibliothèque mathématique open source haute performance basée sur l'interface BLAS (BasicLinearAlgebraSubprograms).

La vulnérabilité non patchable de la clé d'authentification à deux facteurs Yubico brise la sécurité de la plupart des appareils Yubikey 5, Security Key et YubiHSM 2FA. La vulnérabilité non patchable de la clé d'authentification à deux facteurs Yubico brise la sécurité de la plupart des appareils Yubikey 5, Security Key et YubiHSM 2FA. Sep 04, 2024 pm 06:32 PM

Une vulnérabilité de clé d'authentification à deux facteurs Yubico non corrigible a brisé la sécurité de la plupart des appareils Yubikey 5, Security Key et YubiHSM 2FA. La JavaCard Feitian A22 et d'autres appareils utilisant les TPM de la série Infineon SLB96xx sont également vulnérables.

Comment résoudre le problème de la suppression par lots des valeurs clés dans Redis Comment résoudre le problème de la suppression par lots des valeurs clés dans Redis May 31, 2023 am 08:59 AM

Problèmes rencontrés : Au cours du processus de développement, vous rencontrerez des clés qui doivent être supprimées par lots selon certaines règles, telles que login_logID (l'ID est une variable). Vous devez maintenant supprimer des données telles que "login_log*", mais se redis. n'a qu'une requête par lots pour les valeurs de clé de classe, mais il n'y a pas de commande pour la suppression par lots d'une certaine classe. Solution : interrogez d'abord, puis supprimez, utilisez xargs pour transmettre les paramètres (xargs peut convertir les données de canal ou d'entrée standard (stdin) en paramètres de ligne de commande), exécutez d'abord l'instruction de requête, puis supprimez la valeur de clé interrogée et les paramètres del d'origine. supprimer. redis-cliKEYSkey* (condition de recherche)|xargsr

See all articles