php-rsa算法

問題描述

因?qū)拥谌街Ц肚澜涌谟露猓瑢Ψ絻H提供了java版本demo,未提供php版本士鸥,故只能根據(jù)java版本轉(zhuǎn)成php闲孤,

一開始看到對方提供的代碼一臉懵逼⊙﹏⊙‖∣

先看java版本核心代碼

//簽名
public String sign(String content, String privateKey) {
    try {
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
                Base64.decode(privateKey));
        KeyFactory keyf = KeyFactory.getInstance("RSA");
        PrivateKey priKey = keyf.generatePrivate(priPKCS8);
        java.security.Signature signature = java.security.Signature
                .getInstance("SHA1WithRSA");
        signature.initSign(priKey);
        signature.update(content.getBytes());
        byte[] signed = signature.sign();
        return Base64.encode(signed);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
//校驗
public boolean doCheck(String content, String sign, String publicKey) {
    try {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        byte[] encodedKey = Base64.decode(publicKey);
        PublicKey pubKey = keyFactory
                .generatePublic(new X509EncodedKeySpec(encodedKey));
        java.security.Signature signature = java.security.Signature
                .getInstance("SHA1WithRSA");
        signature.initVerify(pubKey);
        signature.update(content.getBytes());
        boolean bverify = signature.verify(Base64.decode(sign));
        return bverify;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

看到RSA、SHA1WithRSA烤礁、Base64讼积、PKCS8EncodedKeySpec、X509EncodedKeySpec這些名詞后脚仔,內(nèi)心是沮喪的勤众,直接翻譯是行不通的,只能祭出Google大殺器來鲤脏。

經(jīng)過幾個關(guān)鍵詞組合嘗試后们颜,終于在gist上找到眉目,直達連接 事例代碼用的bin2hex凑兰、hex2bin掌桩,我們直接替換為base64_encode、base64_decode試試看姑食,竟然一次通過,和java版本的加密解密結(jié)果是一致的

解決方案

  • openssl下載

  • 生成ssl證書

  • openssl genrsa -out key.pem 1024
    openssl rsa -in key.pem -pubout -outform PEM -out pubkey.pem
    openssl rsa -in key.pem -pubout -outform DER -out pubkey.der
    
  • 代碼實現(xiàn)

  • //簽名
    function buildSign($content) {
        $signature = null;
        $pri_key = file_get_contents('key.pem');
        $pri_key_id = openssl_get_privatekey($pri_key);
        openssl_sign($content, $signature, $pri_key_id);
        openssl_free_key($pri_key_id);
        return base64_encode($signature);
    }
    //校驗
    function verifySign($sign, $toSign) {
        $signed_data = base64_decode($sign);
        $pub_key = file_get_contents('pubkey.pem');
        $pub_key_id = openssl_get_publickey($pub_key);
        $ret = openssl_verify($toSign, $signed_data, $pub_key_id);
        return $ret;
    }
    
  • openssl_sign和openssl_verify默認(rèn)算法都是SHA1茅坛,如果是其他請在第4個參數(shù)中傳入音半,請參考如下

define ('OPENSSL_ALGO_SHA1', 1);
define ('OPENSSL_ALGO_MD5', 2);
define ('OPENSSL_ALGO_MD4', 3);
define ('OPENSSL_ALGO_MD2', 4);
define ('OPENSSL_ALGO_DSS1', 5);
define ('OPENSSL_ALGO_SHA224', 6);
define ('OPENSSL_ALGO_SHA256', 7);
define ('OPENSSL_ALGO_SHA384', 8);
define ('OPENSSL_ALGO_SHA512', 9);
define ('OPENSSL_ALGO_RMD160', 10);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贡蓖,隨后出現(xiàn)的幾起案子曹鸠,更是在濱河造成了極大的恐慌,老刑警劉巖斥铺,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彻桃,死亡現(xiàn)場離奇詭異,居然都是意外死亡晾蜘,警方通過查閱死者的電腦和手機邻眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剔交,“玉大人肆饶,你說我怎么就攤上這事♂#” “怎么了驯镊?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我板惑,道長橄镜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任冯乘,我火速辦了婚禮洽胶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘往湿。我一直安慰自己妖异,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布领追。 她就那樣靜靜地躺著他膳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绒窑。 梳的紋絲不亂的頭發(fā)上棕孙,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音些膨,去河邊找鬼蟀俊。 笑死,一個胖子當(dāng)著我的面吹牛订雾,可吹牛的內(nèi)容都是我干的肢预。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼洼哎,長吁一口氣:“原來是場噩夢啊……” “哼烫映!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起噩峦,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤锭沟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后识补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族淮,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年凭涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了祝辣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡导盅,死狀恐怖较幌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情白翻,我是刑警寧澤乍炉,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布绢片,位于F島的核電站,受9級特大地震影響岛琼,放射性物質(zhì)發(fā)生泄漏底循。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一槐瑞、第九天 我趴在偏房一處隱蔽的房頂上張望熙涤。 院中可真熱鬧,春花似錦困檩、人聲如沸祠挫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽等舔。三九已至,卻和暖如春糟趾,著一層夾襖步出監(jiān)牢的瞬間慌植,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工义郑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝶柿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓非驮,卻偏偏與公主長得像交汤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劫笙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容