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>
Salin selepas log masuk

结果:

<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>
Salin selepas log masuk

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana Nginx menggunakan perpustakaan OpenSSL untuk komunikasi yang lebih selamat Bagaimana Nginx menggunakan perpustakaan OpenSSL untuk komunikasi yang lebih selamat Jun 10, 2023 pm 01:51 PM

Nginx ialah perisian yang digunakan secara meluas dalam pelayan web, pengimbang beban, proksi terbalik dan cache. Semasa penghantaran rangkaian, penyulitan data dan keselamatan telah mendapat perhatian yang semakin meningkat. Untuk meningkatkan keselamatan komunikasi, perpustakaan OpenSSL boleh digunakan untuk melaksanakan protokol SSL/TLS untuk melindungi penghantaran data sensitif. Artikel ini akan menerangkan cara menggunakan Nginx dan perpustakaan OpenSSL untuk mencapai komunikasi yang lebih selamat. Pasang dan konfigurasikan pustaka OpenSSL Mula-mula, anda perlu memasang pustaka OpenSSL pada pelayan. boleh buat

Apakah yang dimaksudkan dengan atribut identiti dalam SQL? Apakah yang dimaksudkan dengan atribut identiti dalam SQL? Feb 19, 2024 am 11:24 AM

Apakah Identity dalam SQL? Contoh kod khusus diperlukan Dalam SQL, Identity ialah jenis data khas yang digunakan untuk menjana nombor penambahan automatik. Ia sering digunakan untuk mengenal pasti setiap baris data dalam jadual. Lajur Identiti sering digunakan bersama dengan lajur kunci utama untuk memastikan setiap rekod mempunyai pengecam unik. Artikel ini akan memperincikan cara menggunakan Identiti dan beberapa contoh kod praktikal. Cara asas untuk menggunakan Identity ialah menggunakan Identit semasa membuat jadual.

Bagaimana SpringBoot memantau peristiwa perubahan kunci redis Bagaimana SpringBoot memantau peristiwa perubahan kunci redis May 26, 2023 pm 01:55 PM

1. Gambaran Keseluruhan Fungsi Pemberitahuan ruang kekunci membolehkan pelanggan menerima acara yang mengubah suai perubahan Rediskey dalam beberapa cara dengan melanggan saluran atau corak. Semua arahan yang mengubah suai kunci kekunci. Semua kunci yang menerima perintah LPUSHkeyvalue[value…]. Semua kunci tamat tempoh dalam pangkalan data db. Acara diedarkan melalui fungsi langganan dan penerbitan Redis (pub/sub), jadi semua pelanggan yang menyokong fungsi langganan dan penerbitan boleh terus menggunakan fungsi pemberitahuan ruang kekunci tanpa membuat sebarang pengubahsuaian. Kerana fungsi langganan dan penerbitan semasa Redis menggunakan strategi fireandforget, jika program anda

Bagaimana untuk menjana sijil SSL MySQL menggunakan OpenSSL Bagaimana untuk menjana sijil SSL MySQL menggunakan OpenSSL Sep 09, 2023 pm 02:12 PM

Pengenalan kepada cara menggunakan OpenSSL untuk menjana sijil SSL MySQL: MySQL ialah sistem pangkalan data hubungan yang digunakan secara meluas Ia adalah sangat penting untuk menggunakan protokol SSL (SecureSocketsLayer) untuk komunikasi yang disulitkan dalam persekitaran pengeluaran sebenar. Artikel ini akan memperkenalkan cara menggunakan alat OpenSSL untuk menjana sijil SSL MySQL dan memberikan contoh kod yang sepadan. Langkah: Pasang OpenSSL: Pertama, pastikan anda telah memasang OpenSSL pada komputer anda

Apakah perbezaan antara versi pembangun dan versi awam iOS? Apakah perbezaan antara versi pembangun dan versi awam iOS? Mar 01, 2024 pm 12:55 PM

Setiap tahun sebelum Apple mengeluarkan versi utama baharu iOS dan macOS, pengguna boleh memuat turun versi beta beberapa bulan lebih awal untuk mengalaminya terlebih dahulu. Memandangkan perisian ini digunakan oleh orang awam dan pembangun, Apple telah melancarkan versi pembangun dan awam, yang merupakan versi beta awam bagi versi beta pembangun, untuk kedua-duanya. Apakah perbezaan antara versi pembangun dan versi awam iOS? Secara literal, versi pembangun ialah versi ujian pembangun dan versi awam ialah versi ujian awam. Versi pembangun dan versi awam menyasarkan khalayak yang berbeza. Versi pembangun digunakan oleh Apple untuk ujian oleh pembangun Anda memerlukan akaun pembangun Apple untuk memuat turun dan meningkatkannya.

Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal memecah keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal memecah keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA Sep 04, 2024 pm 06:32 PM

Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal telah memecahkan keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA. JavaCard A22 Feitian dan peranti lain yang menggunakan TPM siri Infineon SLB96xx juga terdedah. Semua

Pemasangan OpenBLAS di bawah pemasangan CentOS 7 dan CentOS 7 OpenSSL Pemasangan OpenBLAS di bawah pemasangan CentOS 7 dan CentOS 7 OpenSSL Feb 10, 2024 am 11:45 AM

Sebagai sistem pengendalian sumber terbuka, LINUX mempunyai pelbagai aplikasi dan kumpulan pengguna CentOS7 adalah versi cawangan LINUX Ia dibina berdasarkan kod sumber Red Hat Enterprise Linux (RHEL) dan mempunyai tahap kestabilan dan keselamatan yang tinggi . Ia boleh dipasang dan dikonfigurasikan pada CentOS7 OpenBLAS dan OpenSSL adalah keperluan biasa bagi banyak pembangun dan pentadbir sistem. OpenBLAS ialah perpustakaan matematik berprestasi tinggi sumber terbuka berdasarkan antara muka BLAS (BasicLinearAlgebraSubprograms).

Bagaimana untuk menyelesaikan masalah penghapusan kelompok nilai utama dalam redis Bagaimana untuk menyelesaikan masalah penghapusan kelompok nilai utama dalam redis May 31, 2023 am 08:59 AM

Masalah yang dihadapi: Semasa proses pembangunan, anda akan menemui kunci yang perlu dipadamkan secara berkelompok mengikut peraturan tertentu, seperti login_logID (ID ialah pembolehubah Sekarang anda perlu memadamkan data seperti "login_log*", tetapi redis sendiri hanya mempunyai pertanyaan kelompok. Penyelesaian: Tanya dahulu, kemudian padam, gunakan xargs untuk menghantar parameter (xargs boleh menukar paip atau data input standard (stdin) kepada parameter baris arahan), laksanakan pernyataan pertanyaan dahulu, dan kemudian alih keluar nilai kunci yang ditanya dan parameter del asal. padam. redis-cliKEYSkey* (keadaan carian)|xargsr

See all articles