数据安全

my.rsa

说明:mPaaS 10.1.32 及以上版本支持该接口。


非对称加密。
加密与解密过程分别在客户端与服务端完成,且私钥放在服务端;若私钥放在客户端则易泄露,将导致安全问题。

入参

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

success 返回值

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

错误码

错误码 描述 解决方案
10 参数错误 检查参数是否正确。
11 key 错误 检查 key 是否正确。

代码示例

  1. 客户端加密、解密:

    1. Page({
    2. data: {
    3. inputValue: '',
    4. outputValue: '',
    5. },
    6. onInput: function (e) {
    7. this.setData({ inputValue: e.detail.value });
    8. },
    9. onEncrypt: function () {
    10. my.rsa({
    11. action: 'encrypt',
    12. text: this.data.outputValue,
    13. //设置公钥
    14. key: 'MIGfMA0GCSqXXXXXXAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +
    15. 'GzulagP27qSUBYxIJfE04KT+OHVeFFb6XXXXXXea5mkmZrIgp022zZXXXXXXNM62\n' +
    16. '3ouBXXXsfm2ekey8PpQxfXaj8lhM9t8rJlXXXXXXs8Qp7Q5/uYrowQbT9m6t7BFK\n' +
    17. '3egOO2xOKzLpYSqfbQIDAQAB',
    18. success: (result) => {
    19. this.setData({ outputValue: result.text });
    20. },
    21. fail(e) {
    22. my.alert({
    23. content: e.errorMessage || e.error,
    24. });
    25. },
    26. });
    27. },
    28. onDecrypt: function () {
    29. my.rsa({
    30. action: 'decrypt',
    31. text: this.data.inputValue,
    32. //设置私钥
    33. key: 'MIICdwIXXXXXXgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMqaLR1RJVDTiEvo\n' +
    34. 'ZkY8wUrz53obO6VqA/bupJQFjEgl8TTgpP44dVXXXXXX7ydYN5rmaSZmsiCnTbbN\n' +
    35. 'lUOB1Y80zrbeXXXXXXx+bZ6R7Lw+lDF9dqPyWEz23ysmULgURzSzxCntDn+5iujB\n' +
    36. 'BtP2bq3sEUrd6A47bE4rMulhKp9tAgMBAAECgYBjsfRLXXXXXX9hou1Y2KKg+F5K\n' +
    37. 'ZsY2AnIK+6l+XXXXXXAx7e0ir7OJZObb2eyn5rAOCB1r6RL0IH+XXXXXXZANNG9g\n' +
    38. 'pXvRgcZzFY0oqdMZDuSJjpMTj7OXXXXXXGncBfvjAg0zdt9QGAG1at9Jr3i0Xr4X\n' +
    39. '6WrFhtfVlmQUY1VsoQJBAPK2Qj/ClkZNtrSDfoXXXXXXLcNICqFIIGkNQ+XeuTwl\n' +
    40. '+Gq4USTyaTOEe68MHluiciQ+QKvRAUd4E1zeZRZ02ikCQQDVscINBPTtTJt1JfAo\n' +
    41. 'wRfTzA0Lvgig136xLLeQXREcgq1lzgkf+tGyUGYoy9BXsV0mOuYAT9ldja4jhJeq\n' +
    42. 'cEulAkEAuSJ5KjV9dyb0XXXXXXC8d8o5KAodwaRIxJkPv5nCZbT45j6t9qbJxDg8\n' +
    43. 'N+vghDlHI4owvl5wwVlAO8iQBy8e8QJBAJe9CVXFV0XJR/XXXXXX66FxGzJjVi0f\n' +
    44. '185nOXXXXXXCHG5VxxT2PUCo5mHBl8ctIj+rQvalvGs515VQ6YEVDCECQE3S0AU2\n' +
    45. 'BKyFVNtTpPiTyRUWqig4EbSXwjXdr8iBBJDLsMpdWsq7DCwv/ToBoLgXXXXXXc5/\n5DChU8P30EjOiEo=',
    46. success: (result) => {
    47. this.setData({ outputValue: result.text });
    48. },
    49. fail(e) {
    50. my.alert({
    51. content: e.errorMessage || e.error,
    52. });
    53. },
    54. });
    55. },
    56. });
  2. 服务端加密解密:

    1. private static void testJieMi(String miwen, String privateKeyStr) {
    2. //将Base64编码后的私钥转换成PrivateKey对象
    3. //加密后的内容Base64解码
    4. //用私钥解密
    5. try {
    6. PrivateKey privateKey = RSAUtil.string2PrivateKey(privateKeyStr);
    7. byte[] base642Byte = RSAUtil.base642Byte(miwen);
    8. byte[] privateDecrypt = RSAUtil.privateDecrypt(base642Byte, privateKey);
    9. System.out.println("解密后的明文: " + new String(privateDecrypt));
    10. } catch (Exception e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. private static void testJiaMi(String message, String publicKeyStr) {
    15. try {
    16. //将Base64编码后的公钥转换成PublicKey对象
    17. PublicKey publicKey = RSAUtil.string2PublicKey(publicKeyStr);
    18. //用公钥加密
    19. byte[] publicEncrypt = RSAUtil.publicEncrypt(message.getBytes(), publicKey);
    20. //加密后的内容Base64编码
    21. String byte2Base64 = RSAUtil.byte2Base64(publicEncrypt);
    22. System.out.println(byte2Base64);
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. }
    26. }