公私钥生成说明文档

一、公钥生成操作指引:

请前往 OPPO 开放平台,点击进入单游戏详情页,点击“游戏资质”,提交相关资质,并按照下方公私钥生成指引,生成公钥填写提交,资质审核通过后,系统将返回平台公钥。(这一步相当于开发者与平台双方交换公钥)

二、更新公钥说明:

如果需要更新公钥,请联系对接商务,按照下列格式告知 OPPO 商务您的更新公钥诉求: 格式:“您好,我的游戏《XXXXXXX》,游戏 ID:ZZZZZ,需要更新公钥,请尽快开通公钥更新权限”

OPPO 对接商务在收到更新需求后,给您开通公钥权限。您在收到 OPPO 商务回复后,可前往 OPPO 开放平台,在之前提交公钥的位置,重新填写新的公钥并点击提交,提交后告知 OPPO 对接商务,平台将在在 1 个工作日内审核完毕。

三、公钥生成要求

  1. 公钥需要使用 RSA 算法生成,1024 位,生成后使用 Base64 进行编码,编码后的长度是 216 位

  2. 公钥的生成方式,推荐使用 JDK 的 KeyPairGenerator 工具类生成。

  3. 网上有一些在线生成公私钥的网站,不推荐使用,因为这些网站可能不安全,有可能存储生成后的公私钥对

四、使用 java 的工具类 KeyPairGenerator 生成公私钥的代码例子:

MyRSAUtils.java:

import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;

/**
 \* <p>
 \* RSA公钥/私钥/签名工具包
 \* </p>
 */

public class MyRSAUtils {/**
​     \* 加密算法RSA
​     */public static final String  KEY_ALGORITHM       = "RSA";/**
​     \* 获取公钥的key
​     */private static final String PUBLIC_KEY          = "RSAPublicKey";/**
​     \* 获取私钥的key
​     */private static final String PRIVATE_KEY         = "RSAPrivateKey";/**
​     \* <p>
​     \* 生成密钥对(公钥和私钥)
​     \* </p>
​     *
​     \* @return
​     \* @throws Exception
​     */public static Map<String, Object> genKeyPair() throws Exception {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
​        keyPairGen.initialize(1024);KeyPair keyPair = keyPairGen.generateKeyPair();RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();Map<String, Object> keyMap = new HashMap<String, Object>(2);
​        keyMap.put(PUBLIC_KEY, publicKey);
​        keyMap.put(PRIVATE_KEY, privateKey);return keyMap;}public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PRIVATE_KEY);return base64Encode(key.getEncoded());}public static String getPublicKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PUBLIC_KEY);return base64Encode(key.getEncoded());}/**
​     \* 用base64编码
​     \* @param bytes
​     \* @return
​     */private static String base64Encode(byte[] bytes) {return new String(Base64.encodeBase64(bytes));}public static void main(String[] args) throws Exception {Map<String, Object> pairs = MyRSAUtils.genKeyPair();System.out.println("公钥:" + MyRSAUtils.getPublicKey(pairs));System.out.println("私钥:" + MyRSAUtils.getPrivateKey(pairs));}

备注: 这里的 Base64 使用了 Apache 的 commons-codec 工具包

© 2020 OPPO. All rights reserved.

results matching ""

    No results matching ""