支付寶小程序API 數(shù)據(jù)安全

2020-09-15 15:30 更新

非對稱加密。

加密與解密過程分別放置在客戶端與服務(wù)端,私鑰也放在服務(wù)端(若私鑰放在客戶端,容易泄露而導(dǎo)致安全問題)。

掃碼體驗(yàn)

my.rsa.jpeg

效果示例

數(shù)據(jù)安全.gif

示例代碼

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. // 設(shè)置公鑰,需替換你自己的公鑰
  14. key: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +
  15. 'GzulagP27qSUBYxIJfE04KT+OHVeFFb6K+8nWDea5mkmZrIgp022zZVDgdWPNM62\n' +
  16. '3ouBwHlsfm2ekey8PpQxfXaj8lhM9t8rJlC4FEc0s8Qp7Q5/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. // 設(shè)置私鑰,需替換你自己的私鑰
  33. key: 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMqaLR1RJVDTiEvo\n' +
  34. 'ZkY8wUrz53obO6VqA/bupJQFjEgl8TTgpP44dV4UVvor7ydYN5rmaSZmsiCnTbbN\n' +
  35. 'lUOB1Y80zrbei4HAeWx+bZ6R7Lw+lDF9dqPyWEz23ysmULgURzSzxCntDn+5iujB\n' +
  36. 'BtP2bq3sEUrd6A47bE4rMulhKp9tAgMBAAECgYBjsfRLPdfn6v9hou1Y2KKg+F5K\n' +
  37. 'ZsY2AnIK+6l+sTAzfIAx7e0ir7OJZObb2eyn5rAOCB1r6RL0IH+MWaN+gZANNG9g\n' +
  38. 'pXvRgcZzFY0oqdMZDuSJjpMTj7OEUlPyoGncBfvjAg0zdt9QGAG1at9Jr3i0Xr4X\n' +
  39. '6WrFhtfVlmQUY1VsoQJBAPK2Qj/ClkZNtrSDfoD0j083LcNICqFIIGkNQ+XeuTwl\n' +
  40. '+Gq4USTyaTOEe68MHluiciQ+QKvRAUd4E1zeZRZ02ikCQQDVscINBPTtTJt1JfAo\n' +
  41. 'wRfTzA0Lvgig136xLLeQXREcgq1lzgkf+tGyUGYoy9BXsV0mOuYAT9ldja4jhJeq\n' +
  42. 'cEulAkEAuSJ5KjV9dyb0RIFAz5C8d8o5KAodwaRIxJkPv5nCZbT45j6t9qbJxDg8\n' +
  43. 'N+vghDlHI4owvl5wwVlAO8iQBy8e8QJBAJe9CVXFV0XJR/n/XnER66FxGzJjVi0f\n' +
  44. '185nOlFARI5CHG5VxxT2PUCo5mHBl8ctIj+rQvalvGs515VQ6YEVDCECQE3S0AU2\n' +
  45. 'BKyFVNtTpPiTyRUWqig4EbSXwjXdr8iBBJDLsMpdWsq7DCwv/ToBoLg+cQ4Crc5/\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. 服務(wù)端加密、解密

  1. private static void testJieMi(String miwen, String privateKeyStr) {
  2. // 將Base64編碼后的私鑰轉(zhuǎn)換成PrivateKey對象
  3. // 加密后的內(nèi)容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編碼后的公鑰轉(zhuǎn)換成PublicKey對象
  17. PublicKey publicKey = RSAUtil.string2PublicKey(publicKeyStr);
  18. // 用公鑰加密
  19. byte[] publicEncrypt = RSAUtil.publicEncrypt(message.getBytes(), publicKey);
  20. // 加密后的內(nèi)容Base64編碼
  21. String byte2Base64 = RSAUtil.byte2Base64(publicEncrypt);
  22. System.out.println(byte2Base64);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }

入?yún)?/h2>

Object 類型,屬性如下:

屬性 類型 必填 描述
action String 使用 RSA 加密還是 RSA 解密。encrypt 為加密。decrypt 為解密。
text String 要處理的文本,加密為原始文本,解密為 Base64 編碼格式文本。
key String RSA 密鑰。加密使用公鑰,解密使用私鑰。
success Function 調(diào)用成功的回調(diào)函數(shù)。
fail Function 調(diào)用失敗的回調(diào)函數(shù)。
complete Function 調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行)。

success 回調(diào)函數(shù)

入?yún)?Object 類型,屬性如下:

屬性 類型 描述
text String 經(jīng)過處理過后得到的文本,加密為 Base64編碼文本,解密為原始文本。

fail 回調(diào)函數(shù)

入?yún)?Object 類型,屬性如下:

屬性 類型 描述
error String 錯(cuò)誤碼
errorMessage String 錯(cuò)誤信息

錯(cuò)誤碼

錯(cuò)誤碼 描述 解決方案
10 參數(shù)錯(cuò)誤 建議檢查參數(shù)是否正確。
11 key 錯(cuò)誤 建議檢查 key 是否正確。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號