国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

  • <center id="qujjd"><optgroup id="qujjd"></optgroup></center>
    1. 文檔說明

      業(yè)務(wù)約定

      三方應(yīng)用接入,只能使 用阿里提供的賬號體系進行登錄和授權(quán),不能提供獨立賬號注冊功能。

       

      通信約定

      支付服務(wù)端支持兩種通信模式,即http(https)模式和TOP模式。

       

      Https通信方式:適合于支付成功后的數(shù)娛服務(wù)端回調(diào) 使用https通信方式采用RSA公私鑰加解密。該方式cp需要首先在數(shù)娛TV開放平臺 (http://open.aliplay.com/)填寫開發(fā)者的RSA公鑰信息。 數(shù)娛使用CP填寫的公鑰進行加簽,CP 的服務(wù)端接到回調(diào)后,使用私鑰進行解簽;回調(diào)的原始內(nèi)容為json格式,具體字段定義參照網(wǎng)絡(luò)支付接口-服務(wù)端支付成功后回調(diào)通知章節(jié)。 根據(jù)原始內(nèi)容json串以及RSA公鑰加密后的內(nèi)容encryptedData會在http參數(shù)的data字段中供CP利用 RSA私鑰解密后使用

       

      TOP通信方式:適合于CP主動調(diào)用支付服務(wù)的場景(如查詢訂單狀態(tài)等) 通過TOP通信方式,該方式CP需使用數(shù)娛TV開放平臺(http://open.aliplay.com/)入住時頒發(fā)的 appkey和appsecret(該信息可以在阿里TV開放平臺應(yīng)用管理頁面中查看), TOP接口的調(diào)用請參 考//open.taobao.com/doc2/detail.htm? spm=a219a.7629140.0.0.jlQptD&treeId=49&articleId=101617&docType=1

       

      安全規(guī)范

      為了防止雙方約定的接口(服務(wù)端 )被濫用帶來的不必要的安全風(fēng)險,接入的合作方需要符合以下要求做好安全控制。 如有疑問,可加入旺旺群621730614 咨詢。

       

      1. 接口安全規(guī)范

      1)接口以HTTP方式開放。

      2)設(shè)計接口需要有身份認證,對來源授權(quán),只允許授權(quán)的IP訪問.

      3)所有的接口調(diào)用都需要有日志記錄 密鑰的傳遞及保存 雙方約定的密鑰,不應(yīng)該大范圍郵件傳遞,應(yīng)以開發(fā)人員人對 人傳遞。密鑰需要妥善保存,避免泄露密鑰引起的安全隱患。

       

      2 密鑰及appsecret的傳遞及保存

      接入合作方所持有的敏感信息,不應(yīng)該大范圍郵件傳遞,應(yīng)以開發(fā)人員人對人傳遞。私鑰和appsecret需要妥善保存,避免泄露私鑰引起的安全隱患。

       

       

        技術(shù)示例

         

        1. RSA秘鑰生成方式

        RSA是一種可用于進行簽名的非對稱算法,即簽名密鑰(私鑰)與驗簽名密鑰( 公鑰)是不一樣的,私鑰用于簽名,公鑰用于驗簽名。使用這種算法簽名在起到防數(shù)據(jù)篡改功能的 同時,還可以起到防抵賴的作用,因為私鑰只有簽名者知道。 可以使用Openssl RSA密鑰生成工具 ,生成一套RSA公私鑰。

        RSA密鑰生成命令:
         
         生成 RSA私鑰

         openssl genrsa -out rsa_private_key.pem 1024


         生成 RSA公鑰

         openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

         將RSA私鑰轉(zhuǎn)換成PKCS8格式
         
         openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

        該工具生成的密鑰文件,里面有一些注釋和回車換行,需要將其去掉后組成一串字符!

         

        2. RSA簽名(sign)算法示例

         

        Java參考代碼

         

        /**

            * RSA簽名算法

            * @param privateKey

            * @param content

            * @param charset

            * @return

            * @throws Exception

            */

           public static String sign(String privateKey, String content, String charset) throws Exception {

              PKCS8EncodedKeySpec priPKCS8   = new PKCS8EncodedKeySpec( Base64.decodeBase64(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(charset) );

              byte[] signed = signature.sign();

              return Base64.encodeBase64String(signed);

           }

         

         

        PHP參考代碼

         

        $privkey = file_get_contents("rsa_private_key.pem"); //無需轉(zhuǎn)PKCS8

        $res = openssl_get_privatekey($privkey);

        openssl_sign($data, $sign, $res);

        $sign = base64_encode($sign);

         

         

        3. 服務(wù)端notify解密demo(java版)

         

        package testRsa;

        import java.io.ByteArrayInputStream;

        import java.io.ByteArrayOutputStream;

        import java.io.InputStream;

        import java.io.UnsupportedEncodingException;

        import java.security.InvalidKeyException;

        import java.security.KeyFactory;

        import java.security.NoSuchAlgorithmException;

        import java.security.PrivateKey;

        import java.security.SignatureException;

        import java.security.spec.InvalidKeySpecException;

        import java.security.spec.PKCS8EncodedKeySpec;

        import javax.crypto.Cipher;

        import org.apache.commons.codec.binary.Base64;

        /**

         *

         * @author zhiyong.xiongzy

         *

         */

        public class testRSA {

              private static String prikey          = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMhDP5oVLHPJpM0QDuAGPupAkF4N3bMOD252BIYncKd8ppYJP0sA1wxnJxrVJN6UOzgK2qEReHUCzda5Hj+GaR8dmYz3v4UMozNeXhx7iqI7EK4Myp/qjCV2ROgh2LaL1ycugacTVx6dSfFvIOcczyhs8D4BUiJlSMsTWPVCSKsPAgMBAAECgYEAkL5KUgvLvUSZIL3ignkBMD7KGbDb9HbNIIGcc3o+KlAl93tni8ZnqEdGNFap91YcFz2BF7mQ3sHQFMpn2nJDtzj0tPsCKtNLHmpOi0ctAxedhzip+rOT6obNK+POL6czMWGJOaW8zLefxftgZWkT+eZactn507xc+GiwNsodAMECQQD4OjjnMhQWaSv8kHI27pH92PTv4zFb1msB0H65Im2zQ+8JrlqEH/7AqqMIxkPjIMC/vJLpkZG4TYMCYXjd4rx7AkEAzoiLGwUsXDApbDJJxxgYV6y50H/oJm6ooIOHoCwrluJhlOD81oUQyrLGfgNL95v4avvuQezZ4kmkeWDPvQ35fQJACBM8zqieZqw9NhYs4QSZ0zw/m540eNxc1s5FkRhBoVdQa2w0nZ+81d+3Ng3dH4JtQs+Lp/WIXAqJfIZXPECoCQJAW8QBgrTuu9tOXFuPul1zW2lMel6KiKD8Xa1zUnCtwXG+h8bbsHkZN+btGMpgM5libC6Z80LIoKm14ZRpWQffhQJBAJyxWEnzZA9dvqEhj6I/BTPJgvzc/boGzZ2lKQlN8j57MDkZHryoWtoKjB3Hp5dvTasweI6WHtIm313TSLuoXrg=";

              public static void main(String[] args) {

                     String content = "c/BOhNHjhvCXvOenIyNqmr0FI1M3cYt/BR/WEoMgoi37ZFvKe418xOlRU4AN/QyvY2H7g2osL9oLmArsw35jk43reMFUyemTLnZ4Xw/DXT5xxPzHy4NWLt2/K0mqA2e5PiShf8RX9EdLnoIYZPXKe3Ldnw0ha3RZtP4X2tBsHqU=";

                     String jsonStr;

               try {

                //解密

                     jsonStr = decrypt(content, prikey, "UTF-8");

                     System.out.println(jsonStr);

                     //sign簽名

                     System.out.println(sign(prikey, content, "UTF-8"));

               } catch (Exception e) {

                     e.printStackTrace();

               }

                     

              }

              

              /**

               * RSA簽名算法

               * @param privateKey

               * @param content

               * @param charset

               * @return

               * @throws Exception

               */

              public static String sign(String privateKey, String content, String charset) throws Exception {

                     PKCS8EncodedKeySpec priPKCS8   = new PKCS8EncodedKeySpec( Base64.decodeBase64(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(charset) );

                     byte[] signed = signature.sign();

                     return Base64.encodeBase64String(signed);

              }

         

              public static String decrypt(String content, String private_key, String input_charset) throws Exception {

                     

                     

                     PrivateKey prikey = getPrivateKey(private_key);

                     Cipher cipher = Cipher.getInstance("RSA");

                     cipher.init(Cipher.DECRYPT_MODE, prikey);

                     InputStream ins = new ByteArrayInputStream(Base64.decodeBase64(content.getBytes()));

                     ByteArrayOutputStream writer = new ByteArrayOutputStream();

                     //rsa解密的字節(jié)大小最多是128,將需要解密的內(nèi)容,按128位拆開解密

                     byte[] buf = new byte[128];

                     int bufl;

                     while ((bufl = ins.read(buf)) != -1) {

                            byte[] block = null;

                            if (buf.length == bufl) {

                                   block = buf;

                            } else {

                                   block = new byte[bufl];

                                   for (int i = 0; i < bufl; i++) {

                                          block[i] = buf[i];

                                   }

                            }

                            writer.write(cipher.doFinal(block));

                     }

                     return new String(writer.toByteArray(), input_charset);

              }

         

              public static PrivateKey getPrivateKey(String key) throws Exception {

                     byte[] keyBytes;

                     keyBytes = Base64.decodeBase64(key.getBytes());

                     //使用PKCS8  

                     PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);

                     KeyFactory keyFactory = KeyFactory.getInstance("RSA");

                     return privateKey;

              }

         

        }

                     PrivateKey privateKey = keyFactory.generatePrivate(keySpec);


         

         

        4. 服務(wù)端notify解密demo(php版)


        <?php

        $privkey=<<<EOT

        -----BEGIN PRIVATE KEY-----

        MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/dCMqrU4GCvJ1s

        QwPxvCnYSsXsm0+wdIzPBajdRiI9rvgtxRDq10yHGwXs+RNOGxaglj0F+9kRQ7l5

        BEkN/HgPg90uWT6bNp5Qf4K3qJWfY6FmWoNDKYyIYjDacAVheAC/Idg/0nKgTUKH

        sowx8iXHnKBB3o7B7XGoKCjFKc2PAgMBAAECgYEAjIVAqYdVyav5HZABmQ46oMGm

        Xgshiqom3uRslw0eowu5Mwv38aCYOO9t5RBVYOrcUh3HcNK6vgz6SAhQylK/MKk8

        hynSBnawh5/XZUUI7Zqw5NFoLIHgdKxcNzGhp5a6eTGOyPVXBi9/+PczeD5Enf2n

        2RSCJV2yyAzxAzdM+DECQQD4eVHsYzkkmMFaPnJPWcGuLpl7hz1Fte5n83SiZhY/

        6WJsC0FpKiCmpxrGhl2yM3gp0kS4b7/uuulIEQyPOAWdAkEA5qTiHZL/+GJOtxwU

        kvvVplEmOKGHEcUSoLgxnBYS35S3qgxH4X989coyHV6EMNUXd5hO1vz3RnIVRvrx

        sYsuGwJAcV9x2OlBNoiYmKOrprcun1pV375KX9duS3ITQtJPzqOfq+rK0sBNG51d

        oz3F3LyNVI/DmWAr9DLGpIJa97I5JQJBALcqTmAKM7m/6J9Gb5hi4sMYQvBKZwfX

        p/l3Df7VENv6MPmckyEjq8tObgog234kXGSf0kytzHpnczpRY8wJqe0CQCNv7Th8

        jnlWQ21UVBL1Lr3KcMM/0RJ0hiVGH46Gp93h9c2zsAgHQ01HLi1BeRcM1tZZNPIh

        GqEuuIa/iXjzNNc=

        -----END PRIVATE KEY-----

        EOT;

        $res = openssl_get_privatekey($privkey);

        //$content = "ycoYI7SXtj9GWHHNS27jeF18x7B0JVFxyb0+X/k4fjHpe7Jvwk7TGdT5VF+NWjBKpPVfyv5NRUYMNrHsHSeQgd4AWO6y3e5HWGmhCa92YdAzriSqoU2fAud4zJQtu1lKQP+iM5sC21GhSHlhm+2q443kKjuUX2Fl6wv4+H2onXBmbw2KHbz+knQW9AhjVoamYhy2X0XoAK6KtcQk7frk9ASqgf8iob0kteFp9HN/86+QFLUiH7BQm+Dh3tkDTBzIm4huCN4+bi71FLYLXLUYVWxcSC24S16Z11ihm771dFa+4w2taeAlhOEZHcE1w8uBXZPMlxlkT66OhvQXZRf88g==";

        $content = $_POST['data'];

        $content = base64_decode($content);

        $i = 0;

        $result = "";

        while($head = substr($content, $i, 128)) {

              $i += 128;

              openssl_private_decrypt($head,$newsource,$res);

              $result .= $newsource;

        }

         

        $result = json_decode($result, true);

        var_dump($result);

         

         

        SDK接入方法

         

        1 在eclipse中導(dǎo)入demo,能看到2個工程:

        1.jpg

        1)AlitvSDKLib包含了SDK用到的lib和res

        2)AlitvSDKDemo引用上述Lib工程

         

        2 按照以下截圖配置,把SDK引入您的工程

        1)  在項目屬性中配置

                2.jpg


         

        2) 在Java Build Path中配置

        3.jpg

        3)配置manifest可合并

                  在您的工程根目錄中的project.properties里加入一行代碼: manifestmerger.enabled=true