PHP-RSA加密解密

mark下妙痹,因為公司項目服務(wù)器是用Ruby寫的铸史,用的是RSA加密,就嘗試下用PHP去讀取细诸。T.T沛贪,感覺PHP寫法比iOS簡單多了。

<head>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
 
<?php
 
function rsa_publickey_encrypt($pubk, $data) {
    $pubk = openssl_get_publickey($pubk);
    openssl_public_encrypt($data, $en, $pubk, OPENSSL_PKCS1_PADDING);
    return $en;
}
 
function rsa_publickey_decrypt($pubk, $data) {
    // $prik = openssl_get_privatekey($prik);
    $prik = openssl_get_publickey($pubk);
    // openssl_private_decrypt($data, $de, $prik, OPENSSL_PKCS1_PADDING);
    openssl_public_decrypt($data, $de, $pubk,OPENSSL_PKCS1_PADDING);
    return $de;
}
 
function rsa_encrypt($method, $key, $data, $rsa_bit = 1024) {
    $inputLen = strlen($data);

    $offSet = 0;
    $i = 0;
 
    $maxDecryptBlock = $rsa_bit / 8 - 11;
 
    $en = '';
 
    // 對數(shù)據(jù)分段加密
    while ($inputLen - $offSet > 0) {
 
        if ($inputLen - $offSet > $maxDecryptBlock) {
            $cache = $method($key, substr($data, $offSet, $maxDecryptBlock));
        } else {
            $cache = $method($key, substr($data, $offSet, $inputLen - $offSet));
        }
        $en = $en . $cache;
 
        $i++;
        $offSet = $i * $maxDecryptBlock;
    }
    return bin2hex($en); //二進(jìn)制轉(zhuǎn)十六進(jìn)制
}

function rsa_decrypt($method, $key, $data, $rsa_bit = 1024) {
    $data = pack('H*',$data); //十六進(jìn)制字符串轉(zhuǎn)二進(jìn)制
    $inputLen = strlen($data);
    $offSet = 0;
    $i = 0;
 
    $maxDecryptBlock = $rsa_bit / 8;
 
    $de = '';
    $cache = '';
 
    // 對數(shù)據(jù)分段解密
    while ($inputLen - $offSet > 0) {
 
        if ($inputLen - $offSet > $maxDecryptBlock) {
            $cache = $method($key, substr($data, $offSet, $maxDecryptBlock));
        } else {
            $cache = $method($key, substr($data, $offSet, $inputLen - $offSet));
        }

        $de = $de . $cache;
 
        $i = $i + 1;
        $offSet = $i * $maxDecryptBlock;
    }

    return $de;
}



$pubk = '-----BEGIN PUBLIC KEY-----
xxx
-----END PUBLIC KEY-----';


        $url = 'http://xxx.com/login';
        $post_data['name']      = 'admin';
        $post_data['pwd']       = 'admin';
        $o = "";
        foreach ( $post_data as $k => $v ) 
        { 
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $post_data = substr($o,0,-1);
        $post_data = rsa_encrypt('rsa_publickey_encrypt', $pubk, $post_data);
        echo 'post_data='.$post_data.'</br>';

        $res = request_post($url, $post_data); 
        $de = rsa_decrypt('rsa_publickey_decrypt', $pubk, $res);      

        echo "de=".$de.'</br>';

/**
     * 模擬post進(jìn)行url請求
     * @param string $url
     * @param string $param
     */
    function request_post($url = '', $param = '') {
        if (empty($url) || empty($param)) {
            return false;
        }
        
        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();//初始化curl


        curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定網(wǎng)頁
        curl_setopt($ch, CURLOPT_HEADER, 0);//設(shè)置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結(jié)果為字符串且輸出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $headers = array();
        $headers[] = 'X-ANFAN-PRODUCTID: 2';
        $headers[] = 'X-ANFAN-RETAILER: 1';

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $data = curl_exec($ch);//運(yùn)行curl
        curl_close($ch);
        
        return $data;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末利赋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猩系,更是在濱河造成了極大的恐慌媚送,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寇甸,死亡現(xiàn)場離奇詭異塘偎,居然都是意外死亡疗涉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門吟秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咱扣,“玉大人,你說我怎么就攤上這事涵防∧治保” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵壮池,是天一觀的道長偏瓤。 經(jīng)常有香客問我,道長椰憋,這世上最難降的妖魔是什么厅克? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮橙依,結(jié)果婚禮上证舟,老公的妹妹穿的比我還像新娘。我一直安慰自己窗骑,他們只是感情好褪储,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慧域,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浪读。 梳的紋絲不亂的頭發(fā)上昔榴,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音碘橘,去河邊找鬼互订。 笑死,一個胖子當(dāng)著我的面吹牛痘拆,可吹牛的內(nèi)容都是我干的仰禽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼纺蛆,長吁一口氣:“原來是場噩夢啊……” “哼吐葵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桥氏,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤温峭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后字支,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凤藏,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奸忽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揖庄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栗菜。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹄梢,靈堂內(nèi)的尸體忽然破棺而出疙筹,到底是詐尸還是另有隱情,我是刑警寧澤检号,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布腌歉,位于F島的核電站,受9級特大地震影響齐苛,放射性物質(zhì)發(fā)生泄漏翘盖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一凹蜂、第九天 我趴在偏房一處隱蔽的房頂上張望馍驯。 院中可真熱鬧,春花似錦玛痊、人聲如沸汰瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽混弥。三九已至,卻和暖如春对省,著一層夾襖步出監(jiān)牢的瞬間蝗拿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工蒿涎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哀托,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓劳秋,卻偏偏與公主長得像仓手,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玻淑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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