1. 程式人生 > >在php中使用對稱加密DES3,開發銀行卡繫結,實名驗證……

在php中使用對稱加密DES3,開發銀行卡繫結,實名驗證……

對稱加密:對稱加密是一種資料加密演算法,對一組資料的加密和解密都使用一樣的金鑰(key),可以有效保護金融資料,常見的對稱加密有DES,3DES,AES、RC2、RC4、RC5。

DES3: 對DES演算法的組合,指定3個KEY,運算3次DES,金鑰KEY的總字元長度為24位。

說明: 接觸這個主要是最近對接一個第三方的支付平臺,呼叫他們的銀行卡,證件,姓名的鑑權介面,需要對一些特殊數字(銀行卡號,身份證號)進行DES加密,再進行簽名請求。其實這個主要就是用來做銀行卡繫結或者實名驗證的。

流程:

1.客戶端輸入銀行卡卡號,真實姓名,手機號,身份證號,手機號驗證碼

2.通過匹配當前使用者提交的驗證碼和伺服器上快取的驗證碼是否一致再進行鑑權請求。

3.在支付後臺上拿到DES金鑰儲存,對銀行卡號,證件號等進行DES加密。

4.通常鑑權請求為四要素(真實姓名,身份證號,銀行卡號,手機號[該卡預留號碼])

5.對請求引數進行簽名,再發送請求,根據結果,認證成功,則儲存該使用者身份證號,手機號,銀行卡號。

附: 中間使用者輸完銀行卡號時,需要根據卡號識別出卡型別(什麼銀行)和銀行編碼(全大寫英文,類似銀行的唯一id),記錄該銀行的聯行號(銀行的詳細資訊編號,精確到開戶銀行的省市區,支行)更佳,因為有時對公賬戶需要聯行號。這個識別介面可以去網上找,有免費的,不過阿里雲的介面更好用。

一、DES3類

<?phpnamespaceapp\v1\extend
; classDES3{ //資料加密functionencrypt($input, $key){ $size = mcrypt_get_block_size(MCRYPT_3DES,'ecb'); $input = $this->pkcs5_pad($input, $size); $key = str_pad($key,24,'0'); $td = mcrypt_module_open(MCRYPT_3DES, '', 'ecb', ''); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); @mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data);
return $data; } //資料解密functiondecrypt($encrypted, $key){ $encrypted = base64_decode($encrypted); $key = str_pad($key,24,'0'); $td = mcrypt_module_open(MCRYPT_3DES,'','ecb',''); $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND); $ks = mcrypt_enc_get_key_size($td); @mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $encrypted); mcrypt_generic_deinit($td); mcrypt_module_close($td); $y=$this->pkcs5_unpad($decrypted); return $y; } functionpkcs5_pad($text, $blocksize){ $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } functionpkcs5_unpad($text){ $pad = ord($text{strlen($text)-1}); if ($pad > strlen($text)) { returnfalse; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { returnfalse; } return substr($text, 0, -1 * $pad); } } ?>

二、業務邏輯

protected $desKey   = 'uMPE00c86bPWWyjLhBUlkA82';   // des加密金鑰

/**
     * *鑑權請求
     * @param [array] $[authParam] [綁卡基本資訊輸入]
     * @return [array] [介面資訊反饋]
     */
    public functionverifyAuth($authParam){

        if (empty($authParam)) {
            return false;
        }

        $Des3 = new DES3();      // 例項Des加密類

        $paramReq = array(
            'P1_bizType'        => 'Authentication',            // 交易型別
            'P2_customerNumber' => $this->cusNum,               // 商戶編號
            'P3_orderId'        => $authParam['orderNum'],      // 商戶請求流水號
            'P4_timestamp'      => date('YmdHis'),              // 時間戳
            'P5_verifyType'     => $this->authType,             // 認證型別
            'P6_payerName'      => $authParam['payerName'],     // 姓名
            'P7_idCardType'     => 'IDCARD',                    // 證件型別
            'P8_idCardNo'       => $Des3->encrypt($authParam['idCardNo'],$this->desKey),     // 證件號碼
            'P9_cardNo'         => $Des3->encrypt($authParam['cardNo'],$this->desKey),       // 銀行卡號
            'P10_year'          => '',                                                       // 信用卡有效期年份
            'P11_month'         => '',                                                       // 信用卡有效期月份
            'P12_cvv2'          => '',                                                       // 信用卡安全碼
            'P13_phone'         => $Des3->encrypt($authParam['phoneNo'],$this->desKey),      // 手機號碼
        );

        $preSignArr = array();
        foreach($paramReq as $keys => $vals) {
            $preSignArr[] = $vals;
        }

        // 組裝簽名
        $paramReq['sign'] = $this->buildAuthSign($preSignArr, $this->authSignKey);

        // 發起鑑權請求
        $authReault = $this->curl_post($this->authHost, $paramReq);

        return json_decode($authReault, true);     // 返回請求結果
    }


/**
* *生成鑑權請求籤名
* @param [array] $[authParam] [鑑權引數集]
* @return [string] [md5簽名串]
*/
protected functionbuildAuthSign($authParam,$signKey){

   $reqStr = "";
   foreach($authParam as $keys=>$vals) {
     $reqStr .= '&'.$vals;
   }

   // if(!$key) {
   //     return md5($reqStr);
   //     die;
   // }
   // return $key;
   // die;
        
   //$newSign = $reqStr.'&'.$signKey;
   $newSign = md5($reqStr.'&'.$signKey);
   return $newSign;
}


/**
* *curl發起post請求
* @param [string] $[url] [請求地址]
* @param [array] $[params] [請求引數集]
* @return  [返回結果集]
*/
protected functioncurl_post($url,$params){
    $ch = curl_init();  // 初始化curl
    curl_setopt($ch,CURLOPT_URL,$url);              // 抓取指定網頁
    curl_setopt($ch, CURLOPT_HEADER, 0);            // 設定header
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    // 要求結果為字串且輸出到螢幕上
    // curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_POST, 1);              // post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    $data = curl_exec($ch); // 執行curl
    curl_close($ch);
    return($data);          // 輸出結果            
}



個人公眾號 


相關推薦

php使用對稱加密DES3開發銀行卡驗證……

對稱加密:對稱加密是一種資料加密演算法,對一組資料的加密和解密都使用一樣的金鑰(key),可以有效保護金融資料,常見的對稱加密有DES,3DES,AES、RC2、RC4、RC5。DES3: 對DES演算法的組合,指定3個KEY,運算3次DES,金鑰KEY的總字元長度為24位。

php使用對稱加密DES3開發銀行卡綁定驗證……

3des 省市區 返回 就是 unp type 邏輯 ati fun 對稱加密:對稱加密是一種數據加密算法,對一組數據的加密和解密都使用一樣的密鑰(key),可以有效保護金融數據,常見的對稱加密有DES,3DES,AES、RC2、RC4、RC5。 DES3: 對DES算法的

spring mvc 通過controller 傳遞物件給jsp並且資料在修改值後回傳物件給controller

在controller 中需要指定 sessionAttribute的key @sessionattributes註解應用到Controller上面,可以將Model中的屬性同步到session當中。 當需要清除session當中的值得時候,我們只需要在

Angular2學習筆記.4、表單相關雙向資料HeroForm

開始 本次我們將會學會如何用Angular建立表單、two-way data binding(雙向資料繫結)、change tracking(檢測變化)、validation(驗證) 和 error handling(錯誤處理)等功能以及ngModel、ngC

PHP使用CURL實現模擬GET和POST請求親測完美解決

//初始化 $curl = curl_init(); //設定抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //設定標頭檔案的資訊作為資料流輸出 curl_setopt($cur

PHPAES加密解密類

我們在工作中會遇到各種加密,下面就是PHP中AES加密解密的類 <?php  class Aes {     /**      * var string&nbs

PHP對稱加密函式password_hash() 替代Md5()

$hashed_password = password_hash('mypassword',PASSWORD_BCRYPT); var_dump(password_verify ('mypassword', $hashed_password.''));#結果true 我們一般習慣性的使用MD5方

加密演算法之C#相容PHPMD5加密

C#常用的MD5加密演算法: public static string MD5(string password) { byte[] textBytes = System.Text.Encoding.Default.GetBytes(password); try

以例項全面講解PHP多程序程式設計的相關函式的使用php函式

 PHP有一組程序控制函式(編譯時需要–enable-pcntl與posix擴充套件),使得php能實現跟c一樣的建立子程序、使用exec函式執行程式、處理訊號等功能。     <?php header('content-type:text/html;char

php跟時間有關的處理(時區設定計算時間差獲取系統當前時間)

1、修改時區背景 :儲存到Navicat中的時間和本地系統時間相差8小時原因:在app/config下的app.php中有一行['timezone' => 'UTC',}規定的是時區預設是UTC ,即協調世界時,又稱世界統一時間、世界標準時間、國際協調時間

PHP簡單對稱加密

/** * 簡單對稱加密演算法之加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @author Anyon Zou <[email protected]> * @dat

c語言實現rsa nopadding非對稱加密演算法(openssl api方式)匹配java後端 bouncycastle

公私鑰: —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32V2IAfotG8bZhPF8/Bx8y65g EDycAMyTWmvpPCfagEKORO/WvdkTYim7yhG/+

php常用的字符串比較函數strcmp()例解釋

php strcmp 字符串 int strcmp ( string $str1 , string $str2 )以二進制方式進行比較以該函數比較時區分大小寫返回值,如果str1小於str2返回<0,如果str1大於str2返回>0如果兩者相等返回0。<?php $str1 =

php常用的字符串大小寫轉換函數例解釋

php 字符串 處理 PHP字符串處理函數中,最為簡單的幾個函數,相關解釋就不上了,直接看例子。 PHP字符串處理函數中,最為簡單的幾個函數,相關解釋就不上了,直接看例子。 strtolower函數、strtoupper函數、ucfirst函數、ucwords函數<?php $str =

php常用的字符串獲取函數mb_strcut例解釋

php 字符串 string mb_strcut ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) – 獲取字符的一部分1、(PHP 4 >= 4.

2-Wi-Fi無線控制器開發例程(開發8266的幾種方式比較{ATLuaSDK其它}開發工具安裝開發固件獲取刷固件)

lan 安裝jdk 總結 .cn 必須 教程 單片機 要求 ont 1-AT,Lua,SDK開發方式總結 2-安裝JDK 3-從瀏覽器獲取開發固件 4-自己動手編譯固件(提供視頻教程,必須的文件和匠芯編譯好的bin文件),初學者不要求自己編譯,先學會使用即可 5-刷入學習固

VUEHTML物件的ID動態在mounted根據ID無法獲取到物件

頁面如下: <template> <div :id="objId" class="randomBoxDiv" :style="stylesBox"> </div> </template> 其中,div的ID是動態繫結的。

vue 懶載入開發環境不適用生產環境才適用

router.jsimport Vue from 'vue' import Router from 'vue-router' //開發環境不適用懶載入 const _import = require('./_import_' + process.env.NODE_ENV);

vue 開發element-ui庫的switch開關number型別資料不成功問題 解決方法

最近在使用element-ui庫進行vue專案的開發,這個ui庫對於一些後臺管理專案的開發還是非常實用的,各種元件都比較齊全,而且文件也很詳細。但是對於我這種初學者來說,部分元件的文件還需更加詳細。

對使用者資訊顯示進行處理保證使用者資訊保安銀行卡卡號姓名手機號等

場景:專案中有個地方,使用者輸入訂單號,然後顯示對應的使用者資訊,銀行要求我們將對應的使用者資訊進行處理,以保證使用者的資訊保安import java.util.regex.Pattern;/** * @author 作者:程式碼君小飛 * @version 建立時間:201