PHP 实现 RSA 加解密

有时候为了数据安全,我们可以给数据进行RSA加密。私钥与公钥对可以通过工具生成。私钥为加密方保存用来加密数据,公钥给到解密方用来解密。示例中的秘钥对使用的2048强度。


    public function rsa()
    {
        // 公钥,解密用
        $publicKey = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsCcLc566TmAu8wgeZe3c
KSyJzK5rlOAKa8vBqu5csd3LK1M946mqw0q2J4TJOPdWoavDlSTA8UrNvPoRcWhy
9BC7Vu8+kmiwHXvk6swKHpml70nPIWyctQi9UtmR3Zsi+OyvD8r+HCYZqixrgsiE
BEOhn2Wx1Y+9D7OqK1pUNah5n7TBfKzswEzrKZNEpiHv9HMIngJpALEHRfz30gED
iS4ayQX9aq8f9jqTP3WU3ULwet572wKEcc1FuN5Dl10pRQUyaJESY6vyoQdEdt9n
gNUd38a4ircU9SEtKpcoEkc061rZoFTTDksjau7X64IXMU8eHMoYE+N9zhTyl86o
iwIDAQAB
-----END PUBLIC KEY-----';
		// 私钥,加密用
        $privateKey = '-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwJwtznrpOYC7z
CB5l7dwpLInMrmuU4Apry8Gq7lyx3csrUz3jqarDSrYnhMk491ahq8OVJMDxSs28
+hFxaHL0ELtW7z6SaLAde+TqzAoemaXvSc8hbJy1CL1S2ZHdmyL47K8Pyv4cJhmq
LGuCyIQEQ6GfZbHVj70Ps6orWlQ1qHmftMF8rOzATOspk0SmIe/0cwieAmkAsQdF
/PfSAQOJLhrJBf1qrx/2OpM/dZTdQvB63nvbAoRxzUW43kOXXSlFBTJokRJjq/Kh
B0R232eA1R3fxriKtxT1IS0qlygSRzTrWtmgVNMOSyNq7tfrghcxTx4cyhgT433O
FPKXzqiLAgMBAAECggEBAJzZN14tILE2/bcTLJYQFPBoow6o5Ew8rarMVFcSRWFv
H0Alr77uzYl1FfrcRpw9yFrOaal8f3ya4dT6SdvUaD8gQt+mye1t4BtwvSXApuYW
Y+VMsG2Pm32rGYETD8nmIF7LyRlj455G4qVfRh++0aZGXjxjPdTuVycLEGPn24Gm
VurUNiWMi9Q0iwp5aL00Zgii/0FNaMU2/j7S1czzfVxjKBumykCUq/06glY4AOzt
Al9Fen5wfJ2zQIvBgTJ696oYdvWiEpC4z7dC9X8VhczBxFHZIxOglzbMH3X1zTsL
sVwQjccfvqxqmS07lkkcW+28vhGzPZOoQogPEfrLjtkCgYEA1sN86gLm40x33/as
QLdBbvPV2ldePXEoKJiV+G7PmWve9cVodiZ9T1a67B+erJXsDCCT4VyKXiJN4TE3
yq2kJZkD5tKbAwoINxZOJ9qi+Tj4l7cY/u5/9V47SBZLTv6tji0p0tBxveW88aNL
+HtkXPBP3qC/RKcrsGYIoFiJS5cCgYEA0fmpqBkGerzQ7X6ptPhILxE8aOE5tkBJ
G6XbP7Nza0guM2vzT6JKWl1b4jRbEDaboBPWeTBPyP/cry/T7zT5wHay4gAco0q6
Ccu8D5OVvZvKN44sQyew2lt/UpcUIglVyJf5DMebSW65MDJm+uEtjjMmIDwCVf+B
emC15NreeS0CgYEAtkCvgOd1iO8by7RJ+aGKpd3HXcNG9l1Q9yKGIo3nHwur6mXc
gGepb+rqNfefcFbKOoBq/pTJ15jE/pYGArnY0w9HgFq5sZqR3i3PpYKlS1pNnHKF
g9JiRJfzNvm0bxUxs7YgCAdcfwq3jVhG4FfWlAhbv1Iq/tfe+5ObPnfkC4ECgYB5
+FGh0K+f2lButLX15odft95kefghMuSEx+o87YutFOepfRp/9qDELxjxpEIFgAMU
kJF0Iikmc+IIbXrpp9cwAoNUnoYEIKNCj3M1hSBlXLqxXMe/Vq33mVCzdAkA4HVR
KV5FGynMFSJDqfOB5g2lXXbXIKSmud3HbagbQTwcHQKBgAfylKd5jJgekBXTHIQ5
/AMIrmbcJ0X5bVwq50lsYmik/GAxtqs3f16JFF+ioezjQEgdEh0f7ZVfbQrYzK3D
QKUxnjiHkey/BYqcgau6OwHAu5J15XlWINqTEBRWQ6NmLl1owwkYDeFbjO+2rp8b
e7854KfNTYTNH7eDmr7Aqnvo
-----END PRIVATE KEY-----';
		// 待加密的字符串数据
        $data = '我们测试一下RSA';
		// 为避免乱码,我先进行base64 ecode 
        $data = base64_encode($data);
		// 加密方用私钥加密
        openssl_private_encrypt($data, $encrypted, $privateKey);
        // 解密方用公钥解密
        openssl_public_decrypt($encrypted, $decrypted, $publicKey);
		// 进行base64 decode 得到原字符串
        $originData =  base64_decode($decrypted);
		// 打印出的内容为:"我们测试一下RSA"
        print_r( $originData );

    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我来给你简单地介绍一下 Vue 中使用 jsrsasign 进行 RSA 加密,以及 PHP 中如何使用 jsrsasign 进行 RSA 解密的方法。 首先,你需要在 Vue 项目中安装 jsrsasign 库。可以通过 npm 安装: ``` npm install --save jsrsasign ``` 接下来,在 Vue 组件中引入 jsrsasign 库: ```js import * as jsrsasign from 'jsrsasign'; ``` 然后,你可以使用 jsrsasign 库中的 RSA 加密方法进行加密: ```js const publicKey = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxWq8GIV2n8B0vzgW/9f0\n9f8sokUeMv2kEX0VtL0X+gP+3Z6z8gfk1C0yRd4XnFqT+qfQexJgNQ+6N0lR5t57\nU0BuK7pM6hBcG/auDnTJH5k1ElL6wZaZP3ZwI+o9uZp4t9N4z0QFpQ/2kQGvN9Kv\n/y5Gc0kjM+Lw6J8QHbS3WbiH+OfkD6TwHs3Sv3XrQux6OvD4lSfJtA5pxzXs7pcq\n5X1EaVQq1Gd/5yG9vNzK4+Yx+2j5hJ3bhfJ+o7bLZieVUAyjy3DkGnBfrtD+LQ+3\n2wX8A2ZVd5H/3T3Kd+JyXpVxwX1m8lO5+Ih3vz5IbJfT9dAJWS5jQbT1t6w3OzQ\n1QIDAQAB\n-----END PUBLIC KEY-----"; const encrypt = (text) => { const publicKeyObj = jsrsasign.KEYUTIL.getKey(publicKey); const encrypted = jsrsasign.KJUR.crypto.Cipher.encrypt(text, publicKeyObj); return jsrsasign.hextob64(encrypted); }; ``` 这里的 `publicKey` 是你的 RSA 公钥字符串, `encrypt` 方法用于加密传入的文本。 接下来,我们来看看在 PHP 中如何使用 jsrsasign 进行 RSA 解密。首先,你需要在 PHP 项目中引入 jsrsasign 库: ```php require_once('jsrsasign.php'); ``` 然后,你可以使用 jsrsasign 库中的 RSA 解密方法进行解密: ```php use \phpseclib\Crypt\RSA; $privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD9r0L2CpkLq0XJ\n..."; $ciphertext = "..."; $rsa = new RSA(); $rsa->loadKey($privateKey); $plaintext = $rsa->decrypt(jsrsasign\ASN1::hex2bin($ciphertext)); ``` 这里的 `privateKey` 是你的 RSA 私钥字符串, `ciphertext` 是加密后的密文字符串。`plaintext` 是解密后的原文字符串。 希望这个简单的例子能够帮到你。如果有任何问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值