智能客服
你问我答,随时在线为你解决问题
在manifest.json文件的 features属性中增加如下配置。
{"name": "system.cipher"} 在调用接口页面的<script>部分增加如下配置。
import cipher from '@system.cipher'
或
var cipher = require("@system.cipher") 限制条件 | 说明 |
|---|---|
适用终端 | 手机、平板、智慧屏 |
适用区域 | 全球 |
接口 | 描述 |
|---|---|
RSA加解密。 | |
AES加解密。 | |
获取一个随机数。 |
描述
RSA加解密。
OBJECT参数
属性 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
action | string | 是 | 加解密类型,两个可选值:
|
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);
}
}); 描述
AES加解密。
OBJECT参数
属性 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
action | string | 是 | 加解密类型,两个可选值:
|
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)
})
}
}) 描述
获取一个随机数。
OBJECT参数
类型 | 是否必填 | 返回值 | 说明 |
|---|---|---|---|
int | 是 | string | 输入正整数,范围是1 ~ 32。表示生成的随机数二进制位数。返回一个16进制编码的字符串,全小写。 假设输入参数是3,并且生成的3位随机数是['a','b','c'],则返回值是616263。 非法参数或其他异常场景返回空字符串。 |
示例代码
// 获取16位随机数并打印log
let r16 = cipher.getRandomValues(16);
console.log(`random16:${r16}`); <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方法。 |