PHP 使用RSA分段加密,解密方法

2021-10-14 01:50:00 字數 3388 閱讀 2880

檔案原始碼:

<?php

/** * rsa簽名類

* 注意:公鑰和私鑰必須是一行字串,並且去掉生成時的頭部和尾部

* 帶「----」的兩行,並且注意去掉最後一行的換行

*/class rsa

/*** 設定公鑰和私鑰

* @param string $publickey 公鑰

* @param string $privatekey 私鑰

*/public function setkey($publickey = null, $privatekey = null)

/*** * setup the private key

*/private function setupprivkey()

$pem = chunk_split($this->privatekey, 64, "\n");

$pem = "-----begin private key-----\n" . $pem . "-----end private key-----\n";

$this->_privkey = openssl_pkey_get_private($pem);

return true;

}/**

* * setup the public key

*/private function setuppubkey()

$pem = chunk_split($this->publickey, 64, "\n");

$pem = "-----begin public key-----\n" . $pem . "-----end public key-----\n";

$this->_pubkey = openssl_pkey_get_public($pem);

return true;

}/**

* * encrypt with the private key

*/public function privencrypt($data)

$this->setupprivkey();

//私鑰分段加密

$result='';

$data = str_split($data, $this->encryptblocksize);

foreach ($data as $block)

return $result ? base64_encode($result) : null;

/*$r = openssl_private_encrypt($data, $encrypted, $this->_privkey);

if ($r)

return null;*/

}/**

* * decrypt with the private key

*/public function privdecrypt($encrypted)

$this->setupprivkey();

$encrypted = base64_decode($encrypted);

//分段解密

$result = '';

$data = str_split($encrypted, $this->decryptblocksize);

foreach ($data as $block)

return $result ? $result : null;

/* $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privkey);

if ($r)

return null;*/

}/**

* * encrypt with public key

*/public function pubencrypt($data)

$this->setuppubkey();

//分段加密

$result='';

$data = str_split($data, $this->encryptblocksize);

foreach ($data as $block)

return $result ? base64_encode($result) : null;

/*$r = openssl_public_encrypt($data, $encrypted, $this->_pubkey);

if ($r)

return null;*/

}/**

* * decrypt with the public key

*/public function pubdecrypt($crypted)

$this->setuppubkey();

$crypted = base64_decode($crypted);

$result = '';

$data = str_split($crypted, $this->decryptblocksize);

foreach ($data as $block)

return $result ? $result : null;

/* $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubkey);

if ($r)

return null;*/

}/**

* 構造簽名

* @param string $datastring 被簽名資料

* @return string

*/public function sign($datastring)

/*** 驗證簽名

* @param string $datastring 被簽名資料

* @param string $signstring 已經簽名的字串

* @return number 1簽名正確 0簽名錯誤

*/public function verify($datastring, $signstring)

public function __destruct()

}

使用方法:

$rsa =new rsa($public_key,$private_key);

//私鑰解密

$arginfo = "公鑰加密字串";

$y = $rsa->privdecrypt($arginfo);

$params = json_decode($y,true);

print_r($params);

//私鑰加密

$rsa =new rsa($public_key,$private_key);

$string = $rsa->privencrypt("待加密字串");

echo $string;

RSA非對稱加密解,分段加密解密

rsa 公鑰加密演算法是1977年由 羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和 倫納德 阿德曼 leonard adleman 一起提出的。1987年7月首次在美國公布,當時他們三人都在麻省理工學院工作實習。rsa就是他們三人姓氏開頭字母拼在一起組成的。rsa是...

RSA加密解密的使用!

根據公司的要求需要對一些資料保密,所以與公司做後台的開發人員進行對接測試,特此記錄 在進行加密解密之前我也是網上進行了大量的資料查閱,感覺比較詳細的在此列出,以做參考 由於我這裡與該方法實現有所出入,所以自己另外寫了個方法 我這邊的需求是這樣的 服務端建立公鑰 客戶端 用服務端提供的公鑰對使用者名稱...

RSA加密解密

擷取自我的部落格 因為專案需要,最近做乙個rsa加密解密的介面,使用go進行開發,介面使用jsonrpc,go 對rsa加密解密有很好的支援,不過由於受限於底層微控制器,所以上層應用需要做一些稍微的調整。rsa是一種非對稱加密演算法,什麼是非對稱加密演算法呢,那就是公鑰 私鑰可互相進行加密解密 公鑰...