开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
基础
应用级事件
界面
跳转
多媒体
缓存
文件
位置
网络
设备
worker
数据安全
分享
收藏
自定义通用菜单
更新管理
web-view组件控制
升级支付宝最新版本
隐私信息授权
小程序广告
开放能力 api
开发 > api > 基础 api > 数据安全 > my.rsa
评论
收藏
我的文档
设置

my.rsa(object object)

以 promise 风格调用: 不支持 。

主体: 企业支付宝小程序个人支付宝小程序

相关文档: 支付宝开放平台开发助手

my.rsa 提供 rsa 加解密能力。

rsa(非对称加密)使用的加密密钥(公钥)与解密密钥(私钥)不同,公钥是公开信息,私钥需要保密。

请在小程序运行环境使用公钥进行加密,在服务端使用私钥进行解密(可点此查看示例)。私钥请保存在服务端(若私钥放在客户端,容易泄露而导致安全问题)。

可使用 支付宝开放平台开发助手 生成密钥对。

object object

查看示例
属性类型描述
actionstring使用 rsa 加密还是 rsa 解密。
枚举值描述兼容性
encrypt加密-
decrypt解密-
textstring算法输入。加密时传入明文,解密时传入密文(base64 编码)。rsa key 为 1024 位时,最多支持 117 个字节;rsa key 为 2048 位时,最多支持 245 个字节
keystringrsa 密钥。pkcs8 格式。
加密使用公钥,解密使用私钥。
successfunction调用成功的回调函数。
failfunction调用失败的回调函数。
completefunction调用结束的回调函数(调用成功、失败都会执行)。

success 回调函数

success 回调函数会携带一个 object 类型的对象, 其属性如下:

参数

object object

查看示例
属性类型描述
textstring算法输出。加密时得到密文(base64 编码),解密时得到明文。

fail 回调函数

fail 回调函数会携带一个 object 类型的对象,其属性如下:

参数

object err

查看示例
属性类型描述
errornumber错误码
errormessagestring错误信息

fail 回调的参数为 object,error 属性为错误码,errormessage 属性为错误消息。

错误码错误消息凯发app官方网站的解决方案
10h5rsa param(text and key) must not be empty传入了空 key 或空 text,请检查。
11encrypt key error检查传入的 key 是否有效(pkcs8 格式)。
encrypt error如果 key 为 1024 位,请检查输入的 text 是否超过长度限制(117 字节)。
decrypt key error检查传入的 key 是否有效(pkcs8格式)。
decrypt error
  • 检查传入的 key 是否正确(与加密 key 匹配);
  • key 为 1024 位时,请确保可能的输出 text 不超过 117 字节。
代码示例
扫码体验
my.rsa(object object)
服务端解密-java
success参数
fail参数
my.rsa({
  action: 'encrypt',
  text: 'world',
  // 设置公钥,需替换你自己的公钥
  key:
    'migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdkmi0dusvq04hl6gzgpmfk8 d6\n' 
    'gzulagp27qsubyxijfe04kt ohveffb6k 8nwdea5mkmzrigp022zzvdgdwpnm62\n' 
    '3oubwhlsfm2ekey8ppqxfxaj8lhm9t8rjlc4fec0s8qp7q5/uyrowqbt9m6t7bfk\n' 
    '3egoo2xokzlpysqfbqidaqab',
  success: result => {
    console.log('加密完成:', result.text);
  },
  fail(error) {
    console.error('加密失败: ', json.stringify(error));
  },
});
/**
* 测试用例
*/
// 密钥需要注意的是生成密钥时选择格式:pkcs8(java适用)
static string privatekey="miiccwibadanbgkqhkig9w0baqefaascal0wggjzageaaogbaj7udweirnol3oi/cu2avbvaboph7qowfoamfvtbasaw9yd3qa15wuvsazkidp/xj1clt sgcfxoramegt2fgfl4m5a9ingccqrohwljr22dgt2txjb4ne8llaop8quoftg1ij1101li7 6lfgk8shxb2tfmxs7x2h5jihuc8bnzagmbaaecf2w/toeddz6yos5nllkileorygekesw5wjtommibjugtc7du8v4wya7dze0jftr35nvvtd8o6dzi79e5chh5fuwkxqeldmqetzffplpgyaaevxdvybo3z6mckia1ptnlfj47jtdpabc2al6qfzfjforo uft/aie1pwolf/garecqqd2rlyhbirzfff9bnuawag3rne5i7ef7t64dbzo9frze660a8xk8yxzi7kmviq9aiy6lgsv1ake2w97ccbgntbrakeapnwv7ywqlrm8ybo3viflzsbtuk3rjicwjxzjzklhr91xvwqdlx50l7kt0e1sncuvjw3xr0ygfpnaw4ve9fqmswjaewyn 9tifqscaxuuodx8yyodcwu4c6nox/6fkjv6kkscvzv7t70wxvze0jh8uye2jycywg0xl4zfqgyyb2ygiqjakxltyl8l6b1pl0eqfpnkdpcw0c/nkzq0djeiznxp8eqfavbtpm5hstjikktry4whyl5knwhbahbytq8nijwzyqjaswfwm30dj5yavq3zmyky0aeyqujptdw4m3ujzwb2hynu/kfpngj oeo2a7xaferfo177ruvcqiwpal4y4pfvdw==";
// 加密算法rsa
public static final string key_algorithm = "rsa";//使用默认的算法
// rsa最大解密密文大小; 需要注意,如果用的是2048位密钥,这里需要改为256; 1024密钥是 128
private static final int max_decrypt_block = 256/2;
public static void main(string[] args) throws exception {
    test();
}
// 服务端解密测试
public static void test() throws exception {
    string source="zpc/dtrlduqvqgnolnunn76eb/mkyu hejmrpakrehqnekqwfzzwoxfctd0x8spqdwpsaapqrkn5smuxnc76ma6ii/2tusrrowpxyeef wwcsggbo93gublila3jvou6oiuc5arouicgma5ze612ayrmpvb235yvmxui4e7wy2z7zf1679fyew04m0hfk4eus8sat8dim606qhe/iabrreb3pq6vfi8ku53b35lxb4ipu0ijl90asj1dya6slnbbgk3ut8wbmgazbzqqneshx wivvc6fxw9ynjisdivogi0db1pphkz4cs8woet/4pjzrmb0ushfb9sggja4wo2ig==";
    byte[] encrypteddata = base64.getdecoder().decode(source.getbytes());
    system.out.println("—— 私钥解密 ——");
    byte[] decrypteddata = decrypt_privatekey(encrypteddata, privatekey); // 调用解密方法
    string str = new string(decrypteddata);
    system.out.println("解密后内容:  "  str);
}
/**
 *
 * 私钥解密
 * @param encrypteddata      已加密数据
 * @param privatekey    私钥(base64编码)
 * @return
 * @throws exception
 */
public static byte[] decrypt_privatekey(byte[] encrypteddata, string privatekey) throws exception {
    byte[] keybytes = base64.getdecoder().decode(privatekey.getbytes());//使用jdk的util包下的base64实现解码
    system.out.println("base64解码:"keybytes);
    pkcs8encodedkeyspec pkcs8keyspec = new pkcs8encodedkeyspec(keybytes);
    keyfactory keyfactory = keyfactory.getinstance(key_algorithm);//使用keyfactory工厂处理私钥
    key privatek = keyfactory.generateprivate(pkcs8keyspec);
    cipher cipher = cipher.getinstance(keyfactory.getalgorithm());//使用cipher.getinstance解密
    cipher.init(cipher.decrypt_mode, privatek);
    int inputlen = encrypteddata.length;
    bytearrayoutputstream out = new bytearrayoutputstream();
    int offset = 0;
    byte[] cache;
    int i = 0;        // 对数据分段解密
    while (inputlen - offset > 0) {
        if (inputlen - offset > max_decrypt_block) {
            cache = cipher.dofinal(encrypteddata, offset, max_decrypt_block);
        } else {
            cache = cipher.dofinal(encrypteddata, offset, inputlen - offset);
        }
        out.write(cache, 0, cache.length);
        i;
        offset = i * max_decrypt_block;
    }
    byte[] decrypteddata = out.tobytearray();
    out.close();
    return decrypteddata;
}
{
  "text": "z0uz1hvcnntfkfjcryfsvsvrseva2yj5odzmj6ml7vabngcgs4z21zbdnbub1t7vb3n4sfv9t7okargpkykvvw47oo7y2m4zsuwp1gtbnhqprxzijdnofgwxyvax5szxdupmvcz65yolhamm8brudf h9q8h9ts8upjyzyetjv4="
}
{
  "error": 10,
  "errormessage": "h5rsa params (text and key) must not be empty"
}
  • tip
    ide 模拟器上的 my.rsa 对输入 text 的长度限制大于真机,请以真机为准。

q:加解密的公私钥如何生成?

a:

可以使用 支付宝开放平台开发助手 生成密钥。

内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图