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 是否正确。 |
代码示例
客户端加密、解密:
Page({data: {inputValue: '',outputValue: '',},onInput: function (e) {this.setData({ inputValue: e.detail.value });},onEncrypt: function () {my.rsa({action: 'encrypt',text: this.data.outputValue,//设置公钥key: 'MIGfMA0GCSqXXXXXXAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +'GzulagP27qSUBYxIJfE04KT+OHVeFFb6XXXXXXea5mkmZrIgp022zZXXXXXXNM62\n' +'3ouBXXXsfm2ekey8PpQxfXaj8lhM9t8rJlXXXXXXs8Qp7Q5/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: 'MIICdwIXXXXXXgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMqaLR1RJVDTiEvo\n' +'ZkY8wUrz53obO6VqA/bupJQFjEgl8TTgpP44dVXXXXXX7ydYN5rmaSZmsiCnTbbN\n' +'lUOB1Y80zrbeXXXXXXx+bZ6R7Lw+lDF9dqPyWEz23ysmULgURzSzxCntDn+5iujB\n' +'BtP2bq3sEUrd6A47bE4rMulhKp9tAgMBAAECgYBjsfRLXXXXXX9hou1Y2KKg+F5K\n' +'ZsY2AnIK+6l+XXXXXXAx7e0ir7OJZObb2eyn5rAOCB1r6RL0IH+XXXXXXZANNG9g\n' +'pXvRgcZzFY0oqdMZDuSJjpMTj7OXXXXXXGncBfvjAg0zdt9QGAG1at9Jr3i0Xr4X\n' +'6WrFhtfVlmQUY1VsoQJBAPK2Qj/ClkZNtrSDfoXXXXXXLcNICqFIIGkNQ+XeuTwl\n' +'+Gq4USTyaTOEe68MHluiciQ+QKvRAUd4E1zeZRZ02ikCQQDVscINBPTtTJt1JfAo\n' +'wRfTzA0Lvgig136xLLeQXREcgq1lzgkf+tGyUGYoy9BXsV0mOuYAT9ldja4jhJeq\n' +'cEulAkEAuSJ5KjV9dyb0XXXXXXC8d8o5KAodwaRIxJkPv5nCZbT45j6t9qbJxDg8\n' +'N+vghDlHI4owvl5wwVlAO8iQBy8e8QJBAJe9CVXFV0XJR/XXXXXX66FxGzJjVi0f\n' +'185nOXXXXXXCHG5VxxT2PUCo5mHBl8ctIj+rQvalvGs515VQ6YEVDCECQE3S0AU2\n' +'BKyFVNtTpPiTyRUWqig4EbSXwjXdr8iBBJDLsMpdWsq7DCwv/ToBoLgXXXXXXc5/\n5DChU8P30EjOiEo=',success: (result) => {this.setData({ outputValue: result.text });},fail(e) {my.alert({content: e.errorMessage || e.error,});},});},});
服务端加密解密:
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();}}
该文章对您有帮助吗?