Descriptif des documents
Accord commercial
L'accès aux applications à trois ne peut utiliser que le système de compte fourni par Alibaba pour la connexion et l'autorisation, et les fonctions d'enregistrement de compte indépendantes ne peuvent pas être fournies.
Accord de communication
Le serveur de paiement prend en charge deux modes de communication, à savoir le mode http (https) et le mode TOP.
Méthode de communication HTTPS : convient au rappel du serveur de divertissement numérique après un paiement réussi. Utilisez la méthode de communication https et utilisez le cryptage et le décryptage par clé publique et privée RSA. Dans cette méthode CP, vous devez d'abord remplir les informations de clé publique RSA du développeur sur la plate-forme ouverte Digital Entertainment TV (http://open.aliplay.com/). Digital Entertainment utilise la clé publique renseignée par CP pour signer. Une fois que le serveur du CP a reçu le rappel, il utilise la clé privée pour déchiffrer la signature ; le contenu original du rappel est au format json et les définitions de champs spécifiques font référence à Network. Interface de paiement - Une fois le paiement du serveur réussi, notification de rappel chapitre. Le contenu chiffréLes données basées sur la chaîne json du contenu d'origine et la clé publique RSA seront utilisées dans le champ de données du paramètre http pour que le CP puisse les déchiffrer à l'aide de la méthode de communication RSA TOP : convient aux scénarios dans lesquels le CP appelle activement des services de paiement (tels que). comme vérifier l'état de la commande, etc.) Grâce à la méthode de communication TOP, dans cette méthode, le CP doit utiliser l'appkey et l'appsecret émis par la plate-forme ouverte de télévision de divertissement numérique (http://open.aliplay.com/) lors de l'enregistrement (ces informations peut être géré sur l'application AliTV Open Platform Voir sur la page), veuillez vous référer à //open.taobao.com/doc2/detail.htm?
Spécifications de sécuritéAfin d'éviter les risques de sécurité inutiles causés par une mauvaise utilisation de l'interface (serveur) convenue par les deux parties, les partenaires d'accès doivent se conformer aux exigences suivantes et mettre en œuvre des contrôles de sécurité. Si vous avez des questions, vous pouvez rejoindre le groupe Wangwang 621730614 pour consultation.
1. Spécifications de sécurité de l'interface 1) L'interface est ouverte en mode HTTP.
2) L'interface de conception doit avoir une authentification d'identité, autoriser la source et autoriser uniquement l'accès IP autorisé. 3) Tous les appels d'interface doivent être enregistrés pour enregistrer le transfert de clés et sauvegarder les clés convenues par les deux parties. qui ne devrait pas être important. La livraison des e-mails doit être effectuée de développeur à développeur. La clé doit être conservée correctement pour éviter les risques de sécurité causés par une fuite de la clé. 2 Transmission et stockage des clés et secrets d'application Les informations sensibles détenues par les partenaires d'accès ne doivent pas être transmises à grande échelle par courrier électronique, mais doivent être transmises de personne à personne par les développeurs. La clé privée et le secret d'application doivent être conservés correctement pour éviter les risques de sécurité causés par la fuite de la clé privée. Exemple technique1. RSA est un algorithme asymétrique qui peut être utilisé pour les signatures, c'est-à-dire que la clé de signature (clé privée) et la clé de vérification (clé publique) sont différentes. La clé privée est utilisée pour les signatures et la clé publique est utilisée pour la vérification. Les signatures utilisant cet algorithme peuvent non seulement empêcher la falsification des données, mais également empêcher la répudiation, car la clé privée n'est connue que du signataire. Vous pouvez utiliser l'outil de génération de clés Openssl RSA pour générer un ensemble de clés publiques et privées RSA. Commande de génération de clé RSA : Le fichier de clé généré par cet outil contient des commentaires et des retours chariot, qui doivent être supprimés pour former une chaîne de caractères ! 2 Exemple d'algorithme de signature (signe) RSA Code de référence Java /** * Algorithme de signature RSA * @param * @throws */ public static throws Exception { new décoderBase64 (privateKey) ); KeyFactory keyf = KeyFactory.getInstance("RSA"); java.security.Signature signature = java.security Signature.. getInstance("SHA1WithRSA"); signature.update(content.getBytes(charset) ); byte Base64. "rsa_private_key.pem"); // 3. (version java) importer java.io.InputStream; importer java.security.NoSuchAlgorithmException; importer java.security.PrivateKey; importer java.security.SignatureException; importer java.security.spec.InvalidKeySpecException; importer java.security .spec.PKCS8EncodedKeySpec;import javax.crypto.Cipher; import org.apache.commons.codec.binary.Base64; /** * * @auteur zhiyong.xiongzy * */ public class testRSA { STATIQUE STATIQUE privée prikey = "miicdwibadanbgkqhkig9w0baqefaascamewggjdageaaogbamhdp5ovlhpjpm0qduagpupakf4n3bmod252biynckd8ppyjp0sa1wxnjxrvjn6uozgk2qreHuczda5hjjxrvjn6uozgk2qrehuczda5hjxrvjn6uozgk2qrehuczda. Umoznexhx7iqi7ek4myp / qjcv2Rogh2Lal1yCuGACTVX6dsffVioczyhs8d4BuijlSmstwpvcskSpagMbaAcgyEakl5KUGVLVUSZIL3IGNKBMD7KGBDB9HBNIIGCC3O + 7MQ3SHQFMPN2NJDTZJ0TPSCKTNLHMPOI0CTAXEDHZIP + ROT6OBNK + POL6CZMWGJOAW8ZLEFXFTGZWKT + EZACTN507XC + 8jrlqeh / 7aqqmixkpjimc / vjlpkzg4tymcyxjd4rx7akeazoilgwusxdapbdjjxgyv6y50h / ojm6ooiohocwrlujhlod81ouqyrlgfgn95v4avuqezz4kmkewdpvqjacbm8zqiezqise 4qsz0zw / m540enxc1s5fkrhbovdqa2w0nz + 81d + 3ng3dh4jtqs + lp / wixaqjfizxpecqjaw8qbgrtuu9toxfupul1zw2lmel6kikd8xa1zunc 0LIOKM14ZRPWQFFHQJBAJYXWENZZA9DVQEHJ6I / BTPJGVZC / BOGZZZ2LKQLN8J57MDKZHRYOWTOKJB3HP5DVTASWEI6WHTIM313TSLUOXRG = " ; public static void main(String[] args) { String content = "c/BOhNHjhvCXvOenIyNqmr0FI1M3cYt/BR/WEoMgoi37ZFvKe418xOlRU4AN/QyvY2H7g2osL9oLmAr sw35jk43reMFUyemTLnZ4Xw/DXT5xxPzHy4NWLt2/K0mqA2e5PiShf8RX9EdLnoIYZPXKe3Ldnw0ha3RZtP4X2tBsHqU="; String jsonStr; essayer { //解密 jsonStr = decrypt(content, prikey, "UTF-8"); System.out.println(jsonStr); //sign签名 System.out.println(sign(prikey, content, "UTF -8")); } catch (Exception e) { e.printStackTrace(); } } /** Exception */ le signe de chaîne statique public (String privateKey, String content, String charset) génère une exception { PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decodeBase64(privateKey ); KeyF) acteury 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[] signé = signature.sign(); return Base64.encodeBase64String(signed); } public static String décrypter (Contenu de la chaîne, Chaîne clé_privée, Chaîne input_charset ) lance une exception { PrivateKey prikey = getPrivateKey(private_key); Cipher cipher = "RSA"); cipher.init(Cipher.DECRYPT_MODE, prikey); InputStream ins = new ByteArrayInputStream(Base64.decodeBase64(content.getBytes())); ByteArrayOutputStreamwriter = new ByteArrayOutputStream(); //rsa解密的字节大小最多是128,将需要解密的内容,按128位拆开解密 byte[] buf = new byte[128]; int bufl; while ((bufl = ins.read(buf)) != -1) { byte[] block = null; if (buf.length == bufl) { block = } else { bloc = nouvel octet[bufl]; pour (int i = 0; i < bufl; i++) { block[i] ; } } writer.write(cipher.doFinal(block)); } return new String(writer .toByteArray(), input_charset); } public static PrivateKey getPrivateKey (String key) lève une exception { byte[] keyBytes; key Octets = Base64.decodeBase64(key.getBytes()); //使用PKCS8 PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); retourner la clé privée ; } } PrivateKey privateKey = keyFactory.generatePrivate(keySpec); 4. $privkey=<< ;<EOT -----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/dCMqrU4GCvJ1s QwPxvCnyssXsm0+wdIzPBajdRiI9 rvgt xRDq10yHGwXs+RNOGxaglj0F+9kRQ7l5 BEkN/HgPg90uWT6bNp5Qf4K3qJ WfY6FmWoNDKYyIYjDacAVheAC/Idg/0nKgTUKH sowx8iXHnKBB3o7B7XGoKCjF Kc2PA gMBAAECgYEAjIVAqYdVyav5HZABmQ46oMGm Xgshiqom3uRslw0eowu5Mwv38aCYOO9t5RBVYOrcUh3HcNK6vgz6SAhQylK/MKk8 hynSBnawh5/XZUUI7Zqw5NFoLIHgdKxcNzGhp5a6eTGOyPVXBi9/+PczeD5Enf2n 2RS CJV2yyAzxAzdM+DECQQD4eVHsYzkkmMFaPnJPWcGuLpl7hz1Fte5n83S iZhY/ 6WJsC0FpKiCmpxrGhl2yM3gp0kS4b7/uuulIEQyPOAWdAkEA5qTiHZL/+GJOtxwU kvvVplEmOKGHEcUSoLgxnBYS35S3qgxH4X989coyHV6EMNUXd5 hO1vz3RnIVRvrx sYsuGwJAcV9x2OlBNoiYmKOrprcun1pV375KX9duS3ITQtJPzqOfq+rK0sBNG51d oz3 F3LyNVI/DmWAr9DLGpIJa97I5JQJBALcqTmAKM7m/6J9 Gb5hi4sMYQvBKZwfX p/l3Df7VENv6MPmckyEjq8tObgog234kXGSf0kytzHpnczpRY8wJqe0CQCNv7Th8 jnlWQ21UVBL1Lr3KcMM/0RJ0hiVGH46Gp93h9c2zs AgHQ01HLi1BeRcM1tZZNPIh GqEuuIa /iXjzNNc= -----FIN PRIVATE KEY----- EOT; $res = sl_get_privatekey ($privkey); //$content = "ycoYI7SXtj9GWHHNS27jeF18x7B0JVFxyb0+ X/k4fjH pe7Jvwk7TGdT5VF+NWjBKpPVfyv5NRUYMNrHsHSeQgd4AWO6y3e5HWGmhCa92YdAzriSqoU2fAud4zJQtu1lKQP+iM5sC21GhSHlhm +2q443kKjuUX2Fl6wv4 + H2onXBmbw2KH bz + knQW9AhjVoamYhy2 6Z11ihm771dFa+4w2taeAlhOEZHcE1w8uBXZPMlxlkT66OhvQXZRf88g=="; $content = $_POST['data']; $content = base64_decode($content); $i = 0 ; $result = ""; ($head = substr($content, $i, 128)) { $i += 128; openssl_private_decrypt($head,$newsource,$ res ). 2 按照以下截图配置,把SDK引入您的工程 ) Configurer vrai
Générer la clé privée RSA openssl genrsa -out rsa_private_key.pem 1024
Générer la clé publique RSA openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
Convertir la clé privée RSA au format PKCS8
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Pas besoin de convertir en PKCS8
$res = openssl_get_privatekey($privkey);
openssl_sign($data, $sign, $res);
$sign = base64_encode($sign);
package testRsa;importer java.io .ByteArrayInputStream;importer java.io.ByteArrayOutputStream;$privkey = file_get_contents("rsa_private_key.pem"); //
无需转PKCS8
$res = openssl_get_privatekey($privkey);
openssl_sign($data, $sign, $res);
$sign = base64_encode($sign);
<?php