支付宝小程序API 数据安全

2020-09-15 15:30 更新

非对称加密。

加密与解密过程分别放置在客户端与服务端,私钥也放在服务端(若私钥放在客户端,容易泄露而导致安全问题)。

扫码体验

my.rsa.jpeg

效果示例

数据安全.gif

示例代码

1. 客户端加密、解密

Page({
 data: {
   inputValue: '',
   outputValue: '',
 },
 onInput: function (e) {
   this.setData({ inputValue: e.detail.value });
 },
 onEncrypt: function () {
   my.rsa({
     action: 'encrypt',
     text: this.data.outputValue,
     // 设置公钥,需替换你自己的公钥
     key: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +
     'GzulagP27qSUBYxIJfE04KT+OHVeFFb6K+8nWDea5mkmZrIgp022zZVDgdWPNM62\n' +
     '3ouBwHlsfm2ekey8PpQxfXaj8lhM9t8rJlC4FEc0s8Qp7Q5/uYrowQbT9m6t7BFK\n' +
     '3egOO2xOKzLpYSqfbQIDAQAB', 
     success: (result) => {
       this.setData({ outputValue: result.text });
     },
     fail(e) {
       my.alert({
         content: e.errorMessage || e.error,
       });
     },
   });
 },
 onDecrypt: function () {
   my.rsa({
     action: 'decrypt',
     text: this.data.inputValue,
     // 设置私钥,需替换你自己的私钥
     key: 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMqaLR1RJVDTiEvo\n' +
     'ZkY8wUrz53obO6VqA/bupJQFjEgl8TTgpP44dV4UVvor7ydYN5rmaSZmsiCnTbbN\n' +
     'lUOB1Y80zrbei4HAeWx+bZ6R7Lw+lDF9dqPyWEz23ysmULgURzSzxCntDn+5iujB\n' +
     'BtP2bq3sEUrd6A47bE4rMulhKp9tAgMBAAECgYBjsfRLPdfn6v9hou1Y2KKg+F5K\n' +
     'ZsY2AnIK+6l+sTAzfIAx7e0ir7OJZObb2eyn5rAOCB1r6RL0IH+MWaN+gZANNG9g\n' +
     'pXvRgcZzFY0oqdMZDuSJjpMTj7OEUlPyoGncBfvjAg0zdt9QGAG1at9Jr3i0Xr4X\n' +
     '6WrFhtfVlmQUY1VsoQJBAPK2Qj/ClkZNtrSDfoD0j083LcNICqFIIGkNQ+XeuTwl\n' +
     '+Gq4USTyaTOEe68MHluiciQ+QKvRAUd4E1zeZRZ02ikCQQDVscINBPTtTJt1JfAo\n' +
     'wRfTzA0Lvgig136xLLeQXREcgq1lzgkf+tGyUGYoy9BXsV0mOuYAT9ldja4jhJeq\n' +
     'cEulAkEAuSJ5KjV9dyb0RIFAz5C8d8o5KAodwaRIxJkPv5nCZbT45j6t9qbJxDg8\n' +
     'N+vghDlHI4owvl5wwVlAO8iQBy8e8QJBAJe9CVXFV0XJR/n/XnER66FxGzJjVi0f\n' +
     '185nOlFARI5CHG5VxxT2PUCo5mHBl8ctIj+rQvalvGs515VQ6YEVDCECQE3S0AU2\n' +
     'BKyFVNtTpPiTyRUWqig4EbSXwjXdr8iBBJDLsMpdWsq7DCwv/ToBoLg+cQ4Crc5/\n5DChU8P30EjOiEo=',
     success: (result) => {
       this.setData({ outputValue: result.text });
     },
     fail(e) {
       my.alert({
         content: e.errorMessage || e.error,
       });
     },
   });
 },
});

2. 服务端加密、解密

private static void testJieMi(String miwen, String privateKeyStr) {
    // 将Base64编码后的私钥转换成PrivateKey对象
    // 加密后的内容Base64解码
    // 用私钥解密
    try {
        PrivateKey privateKey = RSAUtil.string2PrivateKey(privateKeyStr);
        byte[] base642Byte = RSAUtil.base642Byte(miwen);
        byte[] privateDecrypt = RSAUtil.privateDecrypt(base642Byte, privateKey);
        System.out.println("解密后的明文: " + new String(privateDecrypt));
    } catch (Exception e) {
        e.printStackTrace();
    }
}


private static void testJiaMi(String message, String publicKeyStr) {
    try {
        // 将Base64编码后的公钥转换成PublicKey对象
        PublicKey publicKey = RSAUtil.string2PublicKey(publicKeyStr);
        // 用公钥加密
        byte[] publicEncrypt = RSAUtil.publicEncrypt(message.getBytes(), publicKey);
        // 加密后的内容Base64编码
        String byte2Base64 = RSAUtil.byte2Base64(publicEncrypt);
        System.out.println(byte2Base64);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

入参

Object 类型,属性如下:

属性 类型 必填 描述
action String 使用 RSA 加密还是 RSA 解密。encrypt 为加密。decrypt 为解密。
text String 要处理的文本,加密为原始文本,解密为 Base64 编码格式文本。
key String RSA 密钥。加密使用公钥,解密使用私钥。
success Function 调用成功的回调函数。
fail Function 调用失败的回调函数。
complete Function 调用结束的回调函数(调用成功、失败都会执行)。

success 回调函数

入参为 Object 类型,属性如下:

属性 类型 描述
text String 经过处理过后得到的文本,加密为 Base64编码文本,解密为原始文本。

fail 回调函数

入参为 Object 类型,属性如下:

属性 类型 描述
error String 错误码
errorMessage String 错误信息

错误码

错误码 描述 解决方案
10 参数错误 建议检查参数是否正确。
11 key 错误 建议检查 key 是否正确。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号