異質系統或網路服務如需進行資料的傳遞或交易,又不希望將資料公開透明化時。
其中之一的方法就是把主機間傳遞的資料加密,而Triple DES這演算法是加密的選擇之一。

加密後的原始資料是byte array的格式,
當轉成明文之後裏面會有特殊字元的問題,
利用Triple DES演算法加解密後在輸出前需轉成Base64的格式,
在傳送時再透過urlencode編碼送出即可。

透過雙方的資料加密傳遞或許可以解決部份驗證的機制
但是並非是絕對安全的作法,僅供參考。

以下的程式碼參考來源至Sanity Free dot org
原文為Triple DES between PHP and C#(本站自行改編VB.net和部份程式)。

Triple DES的VB.NET程式碼(加密)
        Dim input_value AS String
        Dim data As Byte() = Encoding.ASCII.GetBytes(input_value )
        Dim tdes As TripleDES = TripleDES.Create()
        tdes.IV = Encoding.ASCII.GetBytes("12345678")
        tdes.Key = Encoding.ASCII.GetBytes("123456789012345678912345")
        tdes.Mode = CipherMode.ECB
        tdes.Padding = PaddingMode.Zeros
        Dim ict As ICryptoTransform = tdes.CreateEncryptor()
        Dim enc As Byte() = ict.TransformFinalBlock(data, 0, data.Length)
        Return Convert.ToBase64String(enc)

Triple DES的VB.NET程式碼(解密)
        Dim data As Byte() = Convert.FromBase64String(cyper_text.Trim)
        Dim tdes As TripleDES = TripleDES.Create()
        tdes.IV = = Encoding.ASCII.GetBytes("12345678")
        tdes.Key =  Encoding.ASCII.GetBytes("123456789012345678912345")
        tdes.Mode = CipherMode.ECB
        tdes.Padding = PaddingMode.Zeros
        Dim ict As ICryptoTransform = tdes.CreateDecryptor()
        Dim enc As Byte() = ict.TransformFinalBlock(data, 0, data.Length)
        Return Encoding.ASCII.GetString(enc)

Triple DES的PHP程式碼(加密)
        $buffer = $_POST['data']; 
        // get the amount of bytes to pad
        $extra = 8 - (strlen($buffer) % 8);
        // add the zero padding
        if(strlen($buffer) % 80) {
                for($i = 0; $i                         $buffer .= "\0";
                }
        }
        // very simple ASCII key and IV
        $key = "123456789012345678912345";
        $iv = "12345678";
        $cipher_alg=MCRYPT_TripleDES;
        $encrypted_string = mcrypt_encrypt($cipher_alg, $key,$buffer, MCRYPT_MODE_ECB, $iv); 
        $a=base64_encode($encrypted_string);

註:
1.在PHP方面先修改php.ini把一個跟crypt有關的註解取銷掉
2.libmcrypt.dll放在system32底下.

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 湯瑪的吳 的頭像
    湯瑪的吳

    安達利機車行

    湯瑪的吳 發表在 痞客邦 留言(3) 人氣()