1. 程式人生 > >php使用openssl來實現非對稱加密

php使用openssl來實現非對稱加密

使用非對稱加密主要是藉助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。

1.安裝openssl和php的openssl擴充套件

2.生成私鑰:openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護

openssl genrsa -out rsa_private_key.pem 1024

3.生成公鑰:rsa命令用於處理RSA金鑰、格式轉換和列印資訊
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4.這裡我們使用私鑰加密,公鑰解密
<?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('金鑰或者公鑰的檔案路徑不正確');  
/** 
* 生成Resource型別的金鑰,如果金鑰檔案內容被破壞,openssl_pkey_get_private函式返回false 
*/  
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));  
/** 
* 生成Resource型別的公鑰,如果公鑰檔案內容被破壞,openssl_pkey_get_public函式返回false 
*/  
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));  
  
($privateKey && $publicKey) or die('金鑰或者公鑰不可用');  
/** 
* 原資料 
*/  
$originalData = '加密前hahahaha';  
/** 
* 加密以後的資料,用於在網路上傳輸 
*/  
$encryptData = '';  
  
echo '原資料為:', $originalData, PHP_EOL;  
  
///////////////////////////////用私鑰加密////////////////////////  
if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {  
  
    /** 
     * 加密後 可以base64_encode後方便在網址中傳輸 或者列印  否則列印為亂碼 
     */  
    echo '加密成功,加密後資料(base64_encode後)為:', base64_encode($encryptData), PHP_EOL;  
  
} else {  
    die('加密失敗');  
}  
  
  
///////////////////////////////用公鑰解密////////////////////////  
  
/** 
* 解密以後的資料 
*/  
$decryptData ='';  
  
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {  
  
    echo '解密成功,解密後資料為:', $decryptData, PHP_EOL;  
  
} else {  
    die('解密成功');  
}  


相關推薦

php使用openssl實現對稱加密

使用非對稱加密主要是藉助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。 1.安裝openssl和php的openssl擴充套件 2.生成私鑰:openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護 openssl g

go語言實現對稱加密——RSA加密解密的實現

版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 非對稱加密簡介 什麼是非對稱加密 非對稱加密,顧名思義,是相對於對稱加密的一種加密方法,對稱加密是指加密與解密使用的是同一把祕鑰,而非對稱加

Java結合keytool實現對稱加密和解密

非對稱加密 ascii 表示 import enc 通信 vat 方法 ports 在Java安全體系中,簽名屬於JAAS模塊,加解密屬於JCE模塊。keytool的使用keytool是JDK自帶的一個密鑰庫管理工具。這裏只用到了keytool的部分功能,包括生成密鑰對,導

java+JavaScript 實現 對稱加密 rsa

java側是這樣的 package com.tech.sandu.dal.utils; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutp

php使用openssl實現RSA(對稱加密)

使用非對稱加密主要是藉助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。 1.安裝openssl和PHP的openssl擴充套件 2.生成私鑰:openssl genrsa 用於

如何使用gpg工具實現公鑰加密對稱加密對稱加密)?

gpg工具 對稱加密 公鑰加密 非對稱加密 使用gpg實現公鑰加密【對稱加密】1、 對稱加密file文件gpg -c filels file.gpg------------------------對稱加密過程------------------------輸入口令,兩次,例如centos再查看

對稱加密演算法:實現ssh免密碼登入

**描述:利用非對稱加密演算法,實現兩臺主機之間可以免密碼直接登入 ,如下圖:** 整個實驗的原理如下圖: 具體步驟如下: 1、先準備好實驗需要的環境(兩臺虛擬機器–A:192.168.72.73,B:192.168.72.23),此時,我們遠端登入主機B,

對稱加密的簽名和驗籤、加密和解密的Java語言實現

本文采用java.security包的簽名和驗籤。採用A的私鑰簽名傳送至B,B採用A的公鑰進行驗籤。 加解密可以私鑰加密、公鑰解密(或者公鑰加密、私鑰解密)。 一般用於銀行報文傳輸、支付寶、微信、銀行以及各大銀行的資料交換。 package com.example.demo; impo

對稱加密過程詳解(基於RSA對稱加密演算法實現

1、非對稱加密過程:         假如現實世界中存在A和B進行通訊,為了實現在非安全的通訊通道上實現資訊的保密性、完整性、可用性(即資訊保安的三個性質),A和B約定使用非對稱加密通道進行通訊,具體過程如下:   說明:         國內目前使用雙證書體系,即

php實現openssl RSA對稱加密解密

今天跟第三方公司對接別人看了我寫的文件當時文件寫的是DES加密,然後我的一個回答都讓我覺得對不起別人,我說了是AES加密,當時AES和RSA加解密的原理我不瞭解導致我也誤解了別人,今天就特意去理解了一下,下面就看一下RSA非對稱的加解密吧 首先先來說一下RSA和AES的區別

前端js,後臺python實現RSA對稱加密

先熟悉使用 在後臺使用RSA實現祕鑰生產,加密,解密;   # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Crypto.Cipher import PKCS1_v1_5 as Ci

密碼學03--go語言與對稱加密RSA演算法的實現

目錄 1.對稱加密的弊端 2.非對稱加密 2.1 非對稱加密使用場景 2.2 區分公私鑰 2.3 非對稱加密通訊流程 2.4 非對稱加密與對稱加密 3.非對稱加密RSA演算法 3.1 RSA演算法 3.2 RSA原理 3.3 RSA生成金鑰對流程

AES對稱加密+RSA對稱加密實現

</pre>AesEncrypt.h<pre name="code" class="cpp">//enum KeySize { Bits128, Bits192, Bits256 }; // key size, in bits, for construtor #define

對稱加密RSA的C#實現

1.對稱加密演算法對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的金鑰(secret key)。對稱加密有很多種演算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。對稱加密通常使用的是相對較小的金鑰,一

JAVA實現RSA加密,對稱加密演算法

RSA.java package org.icesnow.jeasywx.util.security; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair;

Java實現Rsa對稱加密

import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStre

Java語言的對稱加密實現

眾所周知,網際網路上的安全是非常重要的一個課題,如何讓我們的軟體,通訊協議更加安全,是每個程式設計師都需要思考的問題。 本文主要討論三種非對稱加密的情況。 1.私鑰加密-公鑰解密 2.公鑰加密-私鑰解密 3.私鑰簽名-公鑰驗證 產生金鑰對 無論上

c語言實現rsa nopadding對稱加密演算法(openssl api方式),匹配java後端 bouncycastle

公私鑰: —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32V2IAfotG8bZhPF8/Bx8y65g EDycAMyTWmvpPCfagEKORO/WvdkTYim7yhG/+

DH、RSA與ElGamal對稱加密演算法實現及應用

1.對稱加密與非對稱加密概述 關於對稱加密與非對稱加密的概念這裡不再多說,感興趣可以看下我之前的幾篇文章,下面說一說兩者的主要區別。 對稱加密演算法資料安全,金鑰管理複雜,金鑰傳遞過程複雜,存在金鑰洩露問題。 非對稱加密演算法強度複雜、安全性依賴於演算法與金鑰。但是由於演算法複雜,使得非對稱演算法加解密速度沒

對稱加密

數據加密 bytes codebase 私鑰 .get comm x509 公鑰 except   非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰