檔案原始碼:
<?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是一種非對稱加密演算法,什麼是非對稱加密演算法呢,那就是公鑰 私鑰可互相進行加密解密 公鑰...