国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

非對(duì)稱加密

MobService / 1784人閱讀

摘要:與對(duì)稱加密不同的是,非對(duì)稱加密和解密使用的是不同的密鑰,其中一個(gè)對(duì)外公開(kāi)作為公鑰,另一個(gè)只有所有者擁有,稱為私鑰。中提供基于算法的擴(kuò)展可實(shí)現(xiàn)對(duì)數(shù)據(jù)的非對(duì)稱加密。

與對(duì)稱加密不同的是,非對(duì)稱加密和解密使用的是不同的密鑰,其中一個(gè)對(duì)外公開(kāi)作為公鑰,另一個(gè)只有所有者擁有,稱為私鑰。用私鑰加密的信息只有公鑰才能解開(kāi),或者反之用弓腰加密的信息只有私鑰才能解開(kāi)。常用的非對(duì)稱加密有RSA算法,RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大質(zhì)數(shù)相乘十分容易,但是想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰。PHP中提供基于RSA算法的openssl擴(kuò)展可實(shí)現(xiàn)對(duì)數(shù)據(jù)的非對(duì)稱加密。

在RSA加解密之前,需要先生成一對(duì)公私鑰,可使用linux自帶的RSA密鑰生成工具openssl獲取一對(duì)公私鑰,也可使用php openssl擴(kuò)展函數(shù)生成一對(duì)公私鑰。使用linux生成一對(duì)公私鑰執(zhí)行以下命令即可:

bash-3.2# openssl genrsa -out rsa_private_key.pem 1024

bash-3.2# openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

bash-3.2# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一條命令生成原始 RSA私鑰文件 rsa_private_key.pem,第二條命令將原始 RSA私鑰轉(zhuǎn)換為 pkcs8格式,第三條生成RSA公鑰 rsa_public_key.pem

從上面看出通過(guò)私鑰能生成對(duì)應(yīng)的公鑰,因此我們將私鑰private_key.pem用在服務(wù)器端,公鑰發(fā)放給android ios 桌面程序等客戶端。

筆者生成的一對(duì)公私鑰如下:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+gDNj4Ag6MvL+yfrHdX4qeQFa

J1epFQXBmOsSWBKoXF5haWM6d5gtETO8FRC6RcwpEKZyy7iSyZ70m4EtGMNQvoOT

gHvIceb5GHGBqqMawTjI71P69DYBjWZoLGt/IX3YJixub8nfTG5KW720LXtT/dXn

PAN9jy20h+TfcXvDgwIDAQAB

-----END PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQC+gDNj4Ag6MvL+yfrHdX4qeQFaJ1epFQXBmOsSWBKoXF5haWM6

d5gtETO8FRC6RcwpEKZyy7iSyZ70m4EtGMNQvoOTgHvIceb5GHGBqqMawTjI71P6

9DYBjWZoLGt/IX3YJixub8nfTG5KW720LXtT/dXnPAN9jy20h+TfcXvDgwIDAQAB

AoGAEkfZJp9sCrGy8dJOF2/l8It2HsGhvt7+k2pqPHNpLvDWOcDUPdsWJlT9QvI+

jbF++v3XCzMTfjqM32pAxiQXMfEDcF26wkZtB8E+QVtV0rR9I1OP0wTtfw1tWkd5

cEgfoIrEhaADrxDtLOSDJfDKTKB72H98Lu3iV2iF6igFnQECQQDfLv6eFbH1wmn1

yGq3mR5z1f2yGdSngcgcC53qW8gl6GjjXlyzepz3o+wQ2fk1sLQ+xVGRy7UQHszl

PIDIVaaBAkEA2oL4kQW8jtB+b086ItINyw08x8jCf6Wcmw/SUytdNAGFy8csifwD

FweY9mxH0Cy/ynF3NA+2LQZO0Bz2/DLQAwJAI1lCIq+0/APK3I7duC6cUCR4hhjp

QY6grzB31oKq9LYWxsxPSm4FJoPkA9dCTWqrYbXG8ZyeFOuL8FLg4toOAQJBAIjE

iUhcStUo8rpA4KaCy1dYhb6WjgbPZeI4WPDtp3yxp0kQ9XO4ZUa43qj+xUQrfi/8

LRxM6T3tQM9KEd1xAHkCQGR8bklYgPvgT6Aep/Nq7NZq24N3NC7FY8YxZ85rKpTl

Tnm0UJ8WBNg43uztQ4MJ1IFSwVEOlUVm5VYvV+IIunM=

-----END RSA PRIVATE KEY——

使用PHP生成公私鑰的代碼如下:

$config = array(

"digest_alg" => "sha512",

"private_key_bits" => 4096,

"private_key_type" => OPENSSL_KEYTYPE_RSA,

);

// 創(chuàng)建公私鑰

$res = openssl_pkey_new($config);

// 獲得私鑰 $privKey

openssl_pkey_export($res, $privKey);

// 獲得公鑰 $pubKey

$pubKey = openssl_pkey_get_details($res);

$pubKey = $pubKey["key"];

$data = "hello";

// 私鑰加密

openssl_private_encrypt($data, $encrypted ,$privKey);

// 公鑰解密

openssl_public_decrypt($encrypted, $decrypted, $pubKey);

echo $decrypted;

使用非對(duì)稱加解密的示例代碼如下:

$private_key_path = "rsa_private_key.pem";

$public_key_path = "rsa_public_key.pem";

$private_key = file_get_contents($private_key_path);

$public_key = file_get_contents($public_key_path);

//這個(gè)函數(shù)可用來(lái)判斷私鑰是否是可用的,可用返回資源id Resource id,不可用返回false

$pi_key = openssl_pkey_get_private($private_key);

//這個(gè)函數(shù)可用來(lái)判斷公鑰是否是可用的,同上

$pu_key = openssl_pkey_get_public($public_key);

$data = "hello";//原始數(shù)據(jù)

$encrypted = "";

$decrypted = "";

//私鑰加密,也可使用openssl_public_encrypt公鑰加密,然后使用openssl_private_decrypt解密,加密后數(shù)據(jù)在$encrypted

openssl_private_encrypt($data,$encrypted,$pi_key);

//加密后的內(nèi)容通常含有特殊字符,需要編碼轉(zhuǎn)換下,在網(wǎng)絡(luò)間通過(guò)url傳輸時(shí)要注意base64編碼是否是url安全的

$encrypted = base64_encode($encrypted);

//私鑰加密的內(nèi)容通過(guò)公鑰可解密出來(lái),公鑰加密的可用私鑰解密。不能混淆

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);

echo $decrypted; // hello

//私鑰加密

openssl_private_encrypt($data,$encrypted,$pi_key);

$encrypted = base64_encode($encrypted);

//公鑰解密

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);

echo $decrypted; //hello

?>

非對(duì)稱加密的缺點(diǎn)是加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢,只適合對(duì)少量數(shù)據(jù)進(jìn)行加密。如果既想有很快的加密速度又想保證數(shù)據(jù)比對(duì)稱加密更加安全,可使用混合加密,即對(duì)數(shù)據(jù)進(jìn)行對(duì)稱加密,對(duì)密鑰做非對(duì)稱加密,因?yàn)橐话忝罔€的長(zhǎng)度會(huì)小于數(shù)據(jù)的長(zhǎng)度。解密的時(shí)候先用非對(duì)稱加密得到密鑰,再用密鑰解開(kāi)密文得到明文。

RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。

今天只有短的RSA鑰匙才可能被強(qiáng)力方式解破。到2008年為止,世界上還沒(méi)有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長(zhǎng)度足夠長(zhǎng),用RSA加密的信息實(shí)際上是不能被解破的。但在分布式計(jì)算和量子計(jì)算機(jī)理論日趨成熟的今天,RSA加密安全性受到了挑戰(zhàn)。

本文節(jié)選自 《php7實(shí)踐指南》 陳小龍著

微信掃一掃,發(fā)現(xiàn)更多內(nèi)容

開(kāi)啟贊賞

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/22523.html

相關(guān)文章

  • 對(duì)稱加密算法-RSA

    摘要:非對(duì)稱加密,加密與解密使用的密鑰不是同一密鑰,對(duì)中一個(gè)對(duì)外公開(kāi),稱為公鑰,另一個(gè)只有所有者知道,稱為私鑰。對(duì)稱加密算法不能實(shí)現(xiàn)簽名,因此簽名只能非對(duì)稱算法。正因?yàn)?,這種加密是單向的,所以被稱為非對(duì)稱加密算法。 非對(duì)稱加密,加密與解密使用的密鑰不是同一密鑰,對(duì)中一個(gè)對(duì)外公開(kāi),稱為公鑰,另一個(gè)只有所有者知道,稱為私鑰。用公鑰加密的信息只有私鑰才能解開(kāi),反之,用私鑰加密的信息只有公鑰才能解開(kāi)...

    gggggggbong 評(píng)論0 收藏0
  • 區(qū)塊鏈之對(duì)稱加密算法

    摘要:二如何理解公鑰和私鑰非對(duì)稱加密算法需要兩個(gè)密鑰公開(kāi)密鑰和私有密鑰。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。三非對(duì)稱加密解密原理非對(duì)稱加密算法中,常用的就是算法了,以下就以算法為例來(lái)講解非對(duì)稱加密算法的實(shí)現(xiàn)原理。 非對(duì)稱加密,在現(xiàn)在網(wǎng)絡(luò)應(yīng)用中,有這非常廣泛的場(chǎng)景,更是加密貨幣的基礎(chǔ)。本文主要介紹非對(duì)稱加密、解密的原理和過(guò)程,以及在區(qū)塊鏈中的使用。 一、非對(duì)稱...

    mcterry 評(píng)論0 收藏0
  • 網(wǎng)絡(luò)協(xié)議 13 - HTTPS 協(xié)議:加密路上無(wú)盡頭

    摘要:加密方式一般分為兩種對(duì)稱加密和非對(duì)稱加密。非對(duì)稱加密在非對(duì)稱加密中,加密和解密過(guò)程中使用兩個(gè)不相同的密鑰。這個(gè)由權(quán)威部門(mén)頒發(fā)的稱為證書(shū)。正是通過(guò)這種層層授信背書(shū)的形式,保證了非對(duì)稱加密模式的爭(zhēng)吵運(yùn)轉(zhuǎn)。是的,協(xié)議的思路就是這樣的。 系列文章傳送門(mén): 網(wǎng)絡(luò)協(xié)議 1 - 概述 網(wǎng)絡(luò)協(xié)議 2 - IP 是怎么來(lái),又是怎么沒(méi)的? 網(wǎng)絡(luò)協(xié)議 3 - 從物理層到 MAC 層 網(wǎng)絡(luò)協(xié)議 4 - 交換...

    susheng 評(píng)論0 收藏0
  • SSL協(xié)議之?dāng)?shù)據(jù)加密過(guò)程詳解

    摘要:前言總括原文博客地址協(xié)議之?dāng)?shù)據(jù)加密過(guò)程詳解知乎專欄簡(jiǎn)書(shū)專題前端進(jìn)擊者知乎前端進(jìn)擊者簡(jiǎn)書(shū)博主博客地址的個(gè)人博客生活只要你聽(tīng)過(guò),不可能沒(méi)聽(tīng)過(guò)協(xié)議吧,協(xié)議是一種安全協(xié)議。 前言 總括: 原文博客地址:SSL協(xié)議之?dāng)?shù)據(jù)加密過(guò)程詳解 知乎專欄&&簡(jiǎn)書(shū)專題:前端進(jìn)擊者(知乎)&&前端進(jìn)擊者(簡(jiǎn)書(shū)) 博主博客地址:Damonare的個(gè)人博客 生活 SSL 只要你聽(tīng)過(guò)HTTPS,不可能沒(méi)聽(tīng)過(guò)...

    Seay 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MobService

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<