文档管理中心

密码算法

接口声明

在manifest.json文件的 features属性中增加如下配置。

{"name": "system.cipher"}

导入模块

在调用接口页面的<script>部分增加如下配置。

import cipher from '@system.cipher'

var cipher = require("@system.cipher")

使用限制

展开

限制条件

说明

适用终端

手机、平板、智慧屏

适用区域

全球

接口定义

展开

接口

描述

cipher.rsa(OBJECT)

RSA加解密。

cipher.aes(OBJECT)

AES加解密。

cipher.getRandomValues(int)

获取一个随机数。

cipher.rsa(OBJECT)

描述

RSA加解密。

OBJECT参数

展开

属性

类型

是否必填

说明

action

string

加解密类型,两个可选值:

  • encrypt:加密
  • decrypt:解密

text

string

待加密或解密的文本内容。待加密的文本内容应该是一段普通文本。待解密的文本内容应该是经过 base64 编码的一段二进制值。base64 编码使用默认风格。

key

string

加密或解密使用到的 RSA 密钥,经过 base64 编码后生成的字符串。加密时key为公钥,解密时key为私钥。

transformation

string

RSA算法的填充项,默认为“RSA/None/OAEPWithSHA256AndMGF1Padding”。

success

function

成功回调。

fail

function

失败回调。

complete

function

执行结束后的回调。

success返回值:

展开

参数

类型

说明

text

string

经过加密或解密后生成的文本内容。

fail返回错误码:

展开

错误码

说明

202

输入参数错误。

示例代码

  • 加密
cipher.rsa({
     action: 'encrypt',
    //待加密的文本内容
     text: '',
       transformation: 'RSA/None/OAEPWithSHA256AndMGF1Padding',
     //base64编码后的加密公钥
     key: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +
     'GzulagP27qSUBYxIJfE04KT+OHVeFFb6K+8nWDea5mkmZrIgp022zZVDgdWPNM62\n' +
     '3ouBwHlsfm2ekey8PpQxfXaj8lhM9t8rJlC4FEc0s8Qp7Q5/uYrowQbT9m6t7BFK\n' +
     '3egOO2xOKzLpYSqfbQIDAQAB',
     success: function(data){
       console.log("handling success: " + data.text);
     },
     fail: function (erromsg, errocode) {
       console. log ('cipher.rsa fail--------' + errocode + ': ' + erromsg);
     }
   });
  • 解密
var that=this;
cipher.rsa({
     action: 'decrypt',
    //待解密的内容,是base64编码后的一段二进制值,解密后是文本内容
     text: that.encryptedValue,
       transformation: 'RSA/None/OAEPWithSHA256AndMGF1Padding',
     //base64编码后的解密私钥
     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/\n' +
'5DChU8P30EjOiEo=',
     success: function(data){
       console.log("handling success: " + data.text);
     },
     fail: function (erromsg, errocode) {
       console. log ('cipher.rsa fail--------' + errocode + ': ' + erromsg);
     }
   });

cipher.aes(OBJECT)(1060+)

描述

AES加解密。

OBJECT参数

展开

属性

类型

是否必填

说明

action

string

加解密类型,两个可选值:

  • encrypt:加密
  • decrypt:解密

text

string

待加密或解密的文本内容。待加密的文本内容应该是一段普通文本。待解密的文本内容应该是经过 base64 编码的一段二进制值。base64 编码使用默认风格。

key

string

加密或解密使用到的密钥,经过 base64 编码后生成的字符串。处理text参数设置的内容时需要使用。

transformation

string

AES算法的加密模式和填充项,默认为"AES/CBC/PKCS5Padding"。

iv

string

AES加解密的初始向量,经过base64编码后的字符串,默认值为key值。

ivOffset

int

AES加解密的初始向量偏移,默认值为0。

ivLen

int

AES加解密的初始向量字节长度,默认值为16。

input(1079+)

ArrayBuffer

待加密或解密的内容,如果text设置了内容,则只处理text设置的内容。

secretKey(1079+)

ArrayBuffer

加密或解密使用到的密钥,处理input参数设置的内容时需要使用。

initialVector(1079+)

ArrayBuffer

AES加解密的初始向量,处理input参数设置的内容时需要使用,如果不设置默认值为secretKey的值。

success

function

成功回调。

fail

function

失败回调。

complete

function

执行结束后的回调。

注意

IV固定存在诸多安全隐患,如统计攻击等,可能会对加密数据的安全性造成影响。建议IV使用安全随机数,每次调用接口随机生成IV并且与密文绑定,解密时传入相应IV。

success返回值:

展开

参数

类型

说明

text

string

经过加密或解密后生成的文本内容。加密后内容是经过 base64 编码的一段二进制值,解密后内容是一段普通文本。如果解密后的内容不能转化为 UTF-8 字符串会出错。

output(1079+)

ArrayBuffer

经过加密或解密后生成的内容,对input设置的值进行加密或者解密时返回。

fail返回错误码:

展开

错误码

说明

202

输入参数错误。

示例代码

//加密
cipher.aes({
  action: 'encrypt',
  //待加密的文本内容
  text: 'hello',
  //base64编码后的密钥
  key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=',
  transformation: 'AES/CBC/PKCS5Padding',
  ivOffset: 0,
  ivLen: 16,
  success: (data) => {
    console.log(`handling success: ${data.text}`)
  },
  fail: (data, code) => {
    console.log(`### cipher.aes fail ### ${code}: ${data}`)
  }
})
//解密:
cipher.aes({
  action: 'decrypt',
  //待解密的内容,是base64编码后的一段二进制值
  text: '1o0kf2HXwLxHkSh5W5NhzA==\n',
  //base64编码后的密钥
  key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=',
  transformation: 'AES/CBC/PKCS5Padding',
  ivOffset: 0,
  ivLen: 16,
  success: (data) => {
    this.dealTxt = data.text
  },
  fail: (data, code) => {
    prompt.showToast({
      message: ("解密失败, code=" + code + ":" + data)
    })
  }
})

cipher.getRandomValues(int)(1073+)

描述

获取一个随机数。

OBJECT参数

展开

类型

是否必填

返回值

说明

int

string

输入正整数,范围是1 ~ 32。表示生成的随机数二进制位数。返回一个16进制编码的字符串,全小写。

假设输入参数是3,并且生成的3位随机数是['a','b','c'],则返回值是616263。

非法参数或其他异常场景返回空字符串。

示例代码

// 获取16位随机数并打印log
let r16 = cipher.getRandomValues(16);
console.log(`random16:${r16}`);

Demo

<template>
  <!-- Only one root node is allowed in template. -->
  <div class="container">
    <input class="text" placeholder="please enter encrypt content" value="{{inputvale}}" onchange="getvalue" />
    <div class="cipherstyle">
      <input class="input" type="button" value="rsa encrypt" onclick="rsaencrypt" />
      <input class="input" type="button" value="rsa deciphering" onclick="rsadeciphering" />
      <input class="input" type="button" value="aes encrypt" onclick="aesencrypt" />
      <input class="input" type="button" value="aes deciphering" onclick="aesdeciphering" />
      <input class="input" type="button" value="getRandomValues" onclick="getRandomValues" />
    </div>
  </div>
</template>

<style>
    .container {
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    .cipherstyle {
      flex-direction: column;
      justify-content: center;
      align-items: center;
      width: 100%;
    }
    .text {
      font-size: 40px;
      width: 80%;
      height: 80px;
      margin-bottom: 10px;
    }
    .input {
      font-size: 50px;
      width: 80%;
      height: 80px;
      border-radius: 40px;
      margin-bottom: 10px;
      background-color: #00ced1;
    }
</style>

<script>
    import cipher from '@system.cipher';
    import prompt from '@system.prompt';
    module.exports = {
        data: {
            rsaencryptedValue: '',
            aesencryptedValue: '',
            inputvale: ''
        },
        onInit() {
            this.$page.setTitleBar({
                text: 'cipher',
                textColor: '#ffffff',
                backgroundColor: '#007DFF',
                backgroundOpacity: 0.5,
                menu: true
            });
        },
        getvalue(e) {
            this.inputvale = e.value;
            console.log(this.inputvale);
        },
        rsaencrypt() {
            var that = this;
            cipher.rsa({
                action: 'encrypt',
                text: that.inputvale,
                transformation: 'RSA/None/OAEPWithSHA256AndMGF1Padding',
                key: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\n' +
                    'GzulagP27qSUBYxIJfE04KT+OHVeFFb6K+8nWDea5mkmZrIgp022zZVDgdWPNM62\n' +
                    '3ouBwHlsfm2ekey8PpQxfXaj8lhM9t8rJlC4FEc0s8Qp7Q5/uYrowQbT9m6t7BFK\n' +
                    '3egOO2xOKzLpYSqfbQIDAQAB',
                success: function (data) {
                    console.log("encrypt success: " + data.text);
                    that.rsaencryptedValue = data.text
                    prompt.showToast({
                        message: data.text,
                        duration: 2000,
                        gravity: 'center'
                    })
                },
                fail: function (erromsg, errocode) {
                    console.log('encrypt fail--------' + errocode + ': ' + erromsg);
                }
            });
        },
        rsadeciphering() {
            var that = this;
            cipher.rsa({
                action: 'decrypt',
                text: that.rsaencryptedValue,
                transformation: 'RSA/None/OAEPWithSHA256AndMGF1Padding',
                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/\n' +
                    '5DChU8P30EjOiEo=',
                success: function (data) {
                    console.log("decrypt success: " + data.text);
                    prompt.showToast({
                        message: data.text,
                        duration: 2000,
                        gravity: 'center'
                    })
                },
                fail: function (erromsg, errocode) {
                    console.log('decrypt fail--------' + errocode + ': ' + erromsg);
                }
            });
        },
        aesencrypt() {
            var that = this
            cipher.aes({
                action: 'encrypt',
                text: that.inputvale,
                key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=',
                transformation: 'AES/CBC/PKCS5Padding',
                ivOffset: 0,
                ivLen: 16,
                success: (data) => {
                    console.log(`encrypt success: ${data.text}`)
                    that.aesencryptedValue = data.text
                    prompt.showToast({
                        message: data.text,
                        duration: 2000,
                        gravity: 'center'
                    })
                },
                fail: (data, code) => {
                    console.log(`encrypt fail ### ${code}: ${data}`)
                }
            })
        },
        aesdeciphering() {
            var that = this
            cipher.aes({
                action: 'decrypt',
                text: that.aesencryptedValue,
                key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=',
                transformation: 'AES/CBC/PKCS5Padding',
                ivOffset: 0,
                ivLen: 16,
                success: (data) => {
                    this.dealTxt = data.text
                    console.log("decrypt success: " + data.text);
                    prompt.showToast({
                        message: data.text,
                        duration: 2000,
                        gravity: 'center'
                    })
                },
                fail: (data, code) => {
                    console.log(`decrypt fail ### ${code}: ${data}`);
                }
            })
        },
        getRandomValues() {
            let r16 = cipher.getRandomValues(16);
            console.log(`random16:${r16}`);
            prompt.showToast({
                message: `random16:${r16}`,
                duration: 2000,
                gravity: 'center'
            })
        }
    }
</script>

效果图如下:

版本更新说明

展开

版本

发布日期

描述

1060

2019-12-10

新增cipher.aes方法。

搜索
请输入您想要搜索的关键词