为屏蔽底层硬件和算法库,向上提供统一的密码算法库加解密相关接口。
👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻
导入模块
arduino
import ohos.crypto.*
enum Result
arduino
public enum Result <: ToString{
| INVALID_PARAMS
| NOT_SUPPORT
| ERR_OUT_OF_MEMORY
| ERR_RUNTIME_ERROR
| ERR_CRYPTO_OPERATION
}
表示执行结果的枚举。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 值 | 说明 |
---|---|---|
INVALID_PARAMS | 401 | 非法入参。 |
NOT_SUPPORT | 801 | 操作不支持。 |
ERR_OUT_OF_MEMORY | 17620001 | 内存错误。 |
ERR_RUNTIME_ERROR | 17620002 | 运行时外部错误。 |
ERR_CRYPTO_OPERATION | 17630001 | 调用三方算法库API出错。 |
func getValue()
swift
public func getValue(): Int32
获取枚举的值。
返回值:
类型 | 说明 |
---|---|
Int32 | 枚举的值。 |
func toString()
swift
public func toString(): String
获取枚举的值。
返回值:
类型 | 说明 |
---|---|
String | 枚举的说明。 |
struct DataBlob
swift
public struct DataBlob{
public DataBlob(data: Array<UInt8>) {}
}
存储数组的数据类型。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
data | Array | 是 | 是 | 数据。 |
DataBlob(Array)
swift
DataBlob(public let data: Array<UInt8>) {}
创建DataBlob实例。
示例:
vbscript
let blob = DataBlob("test".toArray())
interface ParamsSpec
kotlin
public interface ParamsSpec
加解密参数,在进行对称加解密时需要构造其子类对象,并将子类对象传入init()方法。
适用于需要iv等参数的对称加解密模式(对于无iv等参数的模式如ECB模式,无需构造,在init()中传入null即可)。
系统能力: SystemCapability.Security.CryptoFramework
| 名称 | 类型 | 可读 | 可写 | 说明 |
|---------|--------|----|----|--------------------------------------------|-----|-----|-------------------------------------------------------------|
| algName | String | 是 | 是 | 指明对称加解密参数的算法模式。可选值如下:- IvParamsSpec:适用于CBC | CTR | OFB | CFB模式。。- GcmParamsSpec:适用于GCM模式。。- CcmParamsSpec:适用于CCM模式。。 |
说明
由于init()的params参数是ParamsSpec类型(父类),而实际需要传入具体的子类对象(如IvParamsSpec),因此在构造子类对象时应设置其父类ParamsSpec的algName参数,使算法库在init()时知道传入的是哪种子类对象。
struct IvParamsSpec
swift
public struct IvParamsSpec <: ParamsSpec {
public mut prop algName:String
public mut prop iv: DataBlob
public init(algName: String, iv: DataBlob)
}
加解密参数ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。
适用于CBC、CTR、OFB、CFB这些仅使用iv作为参数的加解密模式。
系统能力: SystemCapability.Security.CryptoFramework
| 名称 | 类型 | 可读 | 可写 | 说明 |
|----|----------|----|----|----------------------------|-----|-----|---------------------------|-----|----------------------------|-----|-----|------------------|
| iv | DataBlob | 是 | 是 | 指明加解密参数iv。常见取值如下:- AES的CBC | CTR | OFB | CFB模式:iv长度为16字节- 3DES的CBC | OFB | CFB模式:iv长度为8字节- SM410+的CBC | CTR | OFB | CFB模式:iv长度为16字节。 |
说明
传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。
init(String, DataBlob)
swift
init(algName: String, iv: DataBlob)
创建IvParamsSpec实例。
示例:
swift
let iv = IvParamsSpec("IvParamsSpec", DataBlob(Array<UInt8>(8, item: 1)))
struct GcmParamsSpec
swift
public struct GcmParamsSpec <: ParamsSpec {
public mut prop algName: String
public mut prop aad: DataBlob
public mut prop iv: DataBlob
public mut prop authTag: DataBlob
public init(algName: String, iv: DataBlob, add: DataBlob, authTag: DataBlob)
}
加解密参数ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。
适用于GCM模式。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
iv | DataBlob | 是 | 是 | 指明加解密参数iv,长度为12字节。 |
aad | DataBlob | 是 | 是 | 指明加解密参数aad,长度为8字节。 |
authTag | DataBlob | 是 | 是 | 指明加解密参数authTag,长度为16字节。采用GCM模式加密时,需要获取doFinal()输出的DataBlob,取出其末尾16字节作为解密时init()方法的入参GcmParamsSpec中的的authTag。 |
说明
传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。
init(String, DataBlob, DataBlob, DataBlob)
swift
public init(algName: String, iv: DataBlob, add: DataBlob, authTag: DataBlob)
创建GcmParamsSpec实例。
示例:
swift
let gcm = GcmParamsSpec("GcmParamsSpec", DataBlob(Array<UInt8>(12, item: 1)), DataBlob(Array<UInt8>(8, item: 1)), DataBlob(Array<UInt8>(16, item: 1)))
struct CcmParamsSpec
swift
public struct CcmParamsSpec <: ParamsSpec {
public mut prop algName: String
public mut prop authTag: DataBlob
public mut prop aad: DataBlob
public mut prop iv: DataBlob
public init(algName: String, iv: DataBlob, add: DataBlob, authTag: DataBlob)
}
加解密参数ParamsSpec的子类,用于在对称加解密时作为init()方法的参数。
适用于CCM模式。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
iv | DataBlob | 是 | 是 | 指明加解密参数iv,长度为7字节。 |
aad | DataBlob | 是 | 是 | 指明加解密参数aad,长度为8字节。 |
authTag | DataBlob | 是 | 是 | 指明加解密参数authTag,长度为12字节。采用CCM模式加密时,需要获取doFinal()输出的DataBlob,取出其末尾12字节作为解密时init()方法的入参CcmParamsSpec中的authTag。 |
说明
传入init()方法前需要指定其algName属性(来源于父类ParamsSpec)。
init(String, DataBlob, DataBlob, DataBlob)
swift
init(algName: String, iv: DataBlob, add: DataBlob, authTag: DataBlob)
创建CcmParamsSpec实例。
示例:
swift
let ccm = CcmParamsSpec("CcmParamsSpec", DataBlob(Array<UInt8>(7, item: 1)), DataBlob(Array<UInt8>(8, item: 1)), DataBlob(Array<UInt8>(12, item: 1)))
enum CryptoMode
arduino
public enum CryptoMode {
| ENCRYPT_MODE
| DECRYPT_MODE
}
表示加解密操作的枚举。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 值 | 说明 |
---|---|---|
ENCRYPT_MODE | 0 | 表示进行加密操作。 |
DECRYPT_MODE | 1 | 表示进行解密操作。 |
enum CipherSpecItem
arduino
public enum CipherSpecItem {
| OAEP_MD_NAME_STR
| OAEP_MGF_NAME_STR
| OAEP_MGF1_MD_STR
| OAEP_MGF1_PSRC_UINT8ARR
}
表示加解密参数的枚举,这些加解密参数支持通过setCipherSpec接口设置/通过getCipherSpec接口获取。
当前只支持RSA算法和SM2算法。
系统能力: SystemCapability.Security.CryptoFramework
名称 | 值 | 说明 |
---|---|---|
OAEP_MD_NAME_STR | 100 | 表示RSA算法中,使用PKCS1_OAEP模式时,消息摘要功能的算法名。 |
OAEP_MGF_NAME_STR | 101 | 表示RSA算法中,使用PKCS1_OAEP模式时,掩码生成算法(目前仅支持MGF1)。 |
OAEP_MGF1_MD_STR | 102 | 表示RSA算法中,使用PKCS1_OAEP模式时,MGF1掩码生成功能的消息摘要算法。 |
OAEP_MGF1_PSRC_UINT8ARR | 103 | 表示RSA算法中,使用PKCS1_OAEP模式时,pSource的字节流。 |
interface Key
kotlin
public interface Key
密钥(接口),在运行密码算法(如加解密)时需要提前生成其子类对象,并传入Cipher实例的init()方法。
密钥可以通过密钥生成器来生成。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
format | String | 是 | 否 | 密钥的格式。 |
algName | String | 是 | 否 | 密钥对应的算法名(含长度)。 |
func getEncoded()
swift
public func getEncoded(): DataBlob
同步方法,获取密钥数据的字节流。密钥可以为对称密钥,公钥或者私钥。其中,公钥格式满足ASN.1语法、X.509规范、DER编码格式;私钥格式满足ASN.1语法,PKCS#8规范、DER编码方式。
说明
RSA算法使用密钥参数生成私钥时,私钥对象不支持getEncoded。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
DataBlob | 用于查看密钥的具体内容。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
801 | this operation is not supported. |
17620001 | memory error. |
17630001 | crypto operation error. |
示例:
vbnet
let generator = createSymKeyGenerator("3DES192") // The key is generated by a key generator. The generation process is omitted here.
let key = generator.generateSymKey()
let encodedKey = key.getEncoded()
class SymKey
ruby
public class SymKey <: Key {}
对称密钥,是Key的子类,在对称加解密时需要将其对象传入Cipher实例的init()方法使用。
对称密钥可以通过对称密钥生成器SymKeyGenerator来生成。
func clearMem()
- public func clearMem(): Unit
同步方法,将系统底层内存中的的密钥内容清零。建议在不需要使用对称密钥实例时,调用本函数,避免内存中密钥数据存留过久。
系统能力: SystemCapability.Security.CryptoFramework
示例:
scss
let generator = createSymKeyGenerator("3DES192")
let key = generator.generateSymKey()
var encodedKey = key.getEncoded()
AppLog.info("key blob: ${encodedKey.data}") // Display key content.
key.clearMem()
encodedKey = key.getEncoded()
AppLog.info("key blob: ${encodedKey.data}") // Display all 0s.
func createSymKeyGenerator(String)
swift
public func createSymKeyGenerator(algName: String): SymKeyGenerator
通过指定算法名称的字符串,获取相应的对称密钥生成器实例。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
algName | String | 是 | 待生成对称密钥生成器的算法名称。 |
返回值:
类型 | 说明 |
---|---|
SymKeyGenerator | 返回对称密钥生成器的对象。 |
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
801 | this operation is not supported. |
示例:
ini
let symKeyGenerator = createSymKeyGenerator("3DES192")
class SymKeyGenerator
kotlin
public class SymKeyGenerator {}
对称密钥生成器。
在使用该类的方法前,需要先使用createSymKeyGenerator方法构建一个symKeyGenerator实例。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 对称密钥生成器指定的算法名称。 |
func generateSymKey()
swift
public func generateSymKey(): SymKey
获取该对称密钥生成器随机生成的密钥。
必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。
目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
SymKey | 对称密钥SymKey。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17620001 | memory error. |
示例:
ini
let symAlgName = "AES128"
let symKeyGenerator = createSymKeyGenerator(symAlgName)
let symKey = symKeyGenerator.generateSymKey()
func convertKey(DataBlob)
swift
public func convertKey(key: DataBlob): SymKey
根据指定数据生成对称密钥。
必须在使用createSymKeyGenerator创建对称密钥生成器后,才能使用本函数。
说明
对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定"HMAC|SHA256"),则需要传入与哈希长度一致的二进制密钥数据(如传入SHA256对应256位的密钥数据)。
如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定"HMAC",则支持传入长度在[1,4096]范围内(单位为byte)的任意二进制密钥数据。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
key | DataBlob | 是 | 指定的密钥材料数据。 |
返回值:
类型 | 说明 |
---|---|
SymKey | 返回对称密钥SymKey。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
示例:
ini
let arr: Array<UInt8> = [
0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72] // keyLen = 192 (24 bytes)
let symAlgName = "3DES192"
let symKeyGenerator = createSymKeyGenerator(symAlgName)
symKeyGenerator.convertKey(DataBlob(arr))
func createCipher(String)
swift
public func createCipher(transformation: String): Cipher
通过指定算法名称,获取相应的Cipher实例。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
transformation | String | 是 | 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。 |
说明
- 目前对称加解密中,PKCS5和PKCS7的实现相同,其padding长度和分组长度保持一致(即PKCS5和PKCS7在3DES中均按照8字节填充,在AES中均按照16字节填充),另有NoPadding表示不填充。
开发者需要自行了解密码学不同分组模式的差异,以便选择合适的参数规格。例如选择ECB和CBC模式时,建议启用填充,否则必须确保明文长度是分组大小的整数倍;选择其他模式时,可以不启用填充,此时密文长度和明文长度一致(即可能不是分组大小的整数倍)。 - 使用RSA、SM2进行非对称加解密时,必须创建两个Cipher对象分别进行加密和解密操作,而不能对同一个Cipher对象进行加解密。对称加解密没有此要求(即只要算法规格一样,可以对同一个Cipher对象进行加解密操作)。
返回值:
类型 | 说明 |
---|---|
Cipher | 返回加解密生成器的对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
801 | this operation is not supported. |
17620001 | memory error. |
示例:
ini
let cipherAlgName = "3DES192|ECB|PKCS7"
let cipher = createCipher(cipherAlgName)
class Cipher
- public class Cipher {}
提供加解密的算法操作功能,按序调用本类中的init()、update()、doFinal()方法,可以实现对称加密/对称解密/非对称加密/非对称解密。
一次完整的加/解密流程在对称加密和非对称加密中略有不同:
- 对称加解密:init为必选,update为可选(且允许多次update加/解密大数据),doFinal为必选;doFinal结束后可以重新init开始新一轮加/解密流程。
- RSA、SM2非对称加解密:init为必选,不支持update操作,doFinal为必选(允许连续多次doFinal加/解密大数据);RSA不支持重复init,切换加解密模式或填充方式时,需要重新创建Cipher对象。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 加解密生成器指定的算法名称。 |
func init(CryptoMode, Key, ?ParamsSpec)
swift
public func `init`(opMode: CryptoMode, key: Key, params: ?ParamsSpec): Unit
初始化加解密的cipher对象,通过注册回调函数获取结果。
必须在使用createCipher创建Cipher实例后,才能使用本函数。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
opMode | CryptoMode | 是 | 加密或者解密模式。 |
key | Key | 是 | 指定加密或解密的密钥。 |
params | ?ParamsSpec | 否 | 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入None。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
17620002 | runtime error. |
17630001 | crypto operation error. |
示例:
csharp
cipher.`init`(CryptoMode.ENCRYPT_MODE, symKey, None)
func update(DataBlob)
swift
public func update(data: DataBlob): DataBlob
分段更新加密或者解密数据操作,获取加/解密数据。
必须在对Cipher实例使用init()初始化后,才能使用本函数。
说明
- 在进行对称加解密操作的时候,如果开发者对各个分组模式不够熟悉,建议对每次update和doFinal的结果都判断是否为空数组,并在结果不为空数组时取出其中的数据进行拼接,形成完整的密文/明文。这是因为选择的分组模式等各项规格都可能对update和doFinal结果产生影响。
(例如对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组作为基本单位进行加/解密,并输出本次update新产生的加/解密分组结果。
可以理解为,update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,把当前还没被加/解密的数据留着,等下一次update/doFinal传入数据的时候,拼接起来继续凑分组。
最后doFinal的时候,会把剩下的还没加/解密的数据,根据createCipher时设置的padding模式进行填充,补齐到分组的整数倍长度,再输出剩余加解密结果。
而对于可以将分组密码转化为流模式实现的模式,还可能出现密文长度和明文长度相同的情况等。) - 根据数据量,可以不调用update(即init完成后直接调用doFinal)或多次调用update。
算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的对称加解密,可以采用多次update的方式传入数据。 - RSA、SM2非对称加解密不支持update操作。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
data | DataBlob | 是 | 加密或者解密的数据。data不允许传入{data: Array() }。 |
返回值:
类型 | 说明 |
---|---|
DataBlob | 返回此次更新的加/解密结果DataBlob。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
17620002 | runtime error. |
17630001 | crypto operation error. |
示例:
vbscript
let plainText: DataBlob = DataBlob("this is test".toArray())
cipher.update(plainText)
func doFinal(?DataBlob)
swift
public func doFinal(data: ?DataBlob): DataBlob
(1)在对称加解密中,doFinal加/解密(分组模式产生的)剩余数据和本次传入的数据,最后结束加密或者解密数据操作,获取加密或者解密数据。
如果数据量较小,可以在doFinal中一次性传入数据,而不使用update;如果在本次加解密流程中,已经使用update传入过数据,可以在doFinal的data参数处传入None。
根据对称加解密的模式不同,doFinal的输出有如下区别:
- 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每一次update和doFinal的结果拼接起来,会得到"密文+authTag",即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,而其余部分均为密文。(也就是说,如果doFinal的data参数传入None,则doFinal的结果就是authTag)
authTag需要填入解密时的GcmParamsSpec或CcmParamsSpec;密文则作为解密时的入参data。 - 对于其他模式的对称加解密、GCM和CCM模式的对称解密:一次加/解密流程中,每一次update和doFinal的结果拼接起来,得到完整的明文/密文。
(2)在RSA、SM2非对称加解密中,doFinal加/解密本次传入的数据,获取加密或者解密数据。如果数据量较大,可以多次调用doFinal,拼接结果得到完整的明文/密文。
说明
- 对称加解密中,调用doFinal标志着一次加解密流程已经完成,即Cipher实例的状态被清除,因此当后续开启新一轮加解密流程时,需要重新调用init()并传入完整的参数列表进行初始化
(比如即使是对同一个Cipher实例,采用同样的对称密钥,进行加密然后解密,则解密中调用init的时候仍需填写params参数,而不能直接省略为null)。 - 如果遇到解密失败,需检查加解密数据和init时的参数是否匹配,包括GCM模式下加密得到的authTag是否填入解密时的GcmParamsSpec等。
- doFinal的结果可能为null,因此使用.data字段访问doFinal结果的具体数据前,请记得先判断结果是否为null,避免产生异常。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
data | ?DataBlob | 是 | 加密或者解密的数据。data参数允许为None,但不允许传入{data: Array() }。 |
返回值:
类型 | 说明 |
---|---|
DataBlob | 返回剩余数据的加/解密结果DataBlob。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
17620002 | runtime error. |
17630001 | crypto operation error. |
示例:
css
cipher.doFinal(None)
func createSign(String)
swift
public func createSign(algName: String): Sign
Sign实例生成。
系统能力: SystemCapability.Security.CryptoFramework.Sign
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
algName | String | 是 | 指定签名算法:RSA,ECC,DSA或SM2。使用RSA PKCS1模式时需要设置摘要,使用RSA PSS模式时需要设置摘要和掩码摘要。 |
返回值:
类型 | 说明 |
---|---|
Sign | 返回由输入算法指定生成的Sign对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
801 | this operation is not supported. |
17620001 | memory error. |
示例:
ini
var sign = createSign("ECC224|SHA256")
class Sign
kotlin
public class Sign {}
Sign类,使用Sign方法之前需要创建该类的实例进行操作,通过createSign方法构造此实例。按序调用本类中的init、update、sign方法完成签名操作。
Sign类不支持重复初始化,当业务方需要使用新密钥签名时,需要重新创建新Sign对象并调用init初始化。
业务方使用时,在createSign时确定签名的模式,调用init接口设置密钥。
当待签名数据较短时,可在init初始化后,(无需update)直接调用sign接口传入原文数据进行签名。
当待签名数据较长时,可通过update接口分段传入切分后的原文数据,最后调用sign接口对整体原文数据进行签名。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 签名指定的算法名称。 |
func createMd(String)
swift
public func createMd(algName: String): Md
生成Md实例,用于进行消息摘要的计算与操作。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
algName | String | 是 | 指定摘要算法。 |
返回值:
类型 | 说明 |
---|---|
Md | 返回由输入算法指定生成的Md对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
示例:
ini
let md = createMd("SHA256")
class Md
kotlin
public class Md {}
Md类,调用Md方法可以进行MD(Message Digest)摘要计算。调用前,需要通过createMd构造Md实例。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 代表指定的摘要算法名。 |
func update(DataBlob)
swift
public func update(input: DataBlob): Unit
传入消息进行Md更新计算。
系统能力: SystemCapability.Security.CryptoFramework
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input | DataBlob | 是 | 传入的消息。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17630001 | crypto operation error. |
示例:
ini
let md = createMd("SHA256");
let blob: DataBlob = DataBlob("test".toArray())
md.update(blob)
func digest()
swift
public func digest(): DataBlob
返回Md的计算结果。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
DataBlob | 返回计算结果DataBlob。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17620001 | memory error. |
17630001 | crypto operation error. |
示例:
ini
let md = createMd("SHA256")
let blob: DataBlob = DataBlob("test".toArray())
md.update(blob)
let res = md.digest()
func getMdLength()
swift
public func getMdLength(): UInt32
获取Md消息摘要长度(字节数)。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
UInt32 | 返回md计算结果的字节长度。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17630001 | crypto operation error. |
示例:
ini
let md = createMd("SHA256")
let mdLen = md.getMdLength()
func createMac(String)
swift
public func createMac(algName: String): Mac
生成Mac实例,用于进行消息认证码的计算与操作。
系统能力: SystemCapability.Security.CryptoFramework.Mac
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
algName | String | 是 | 指定摘要算法。 |
返回值:
类型 | 说明 |
---|---|
Mac | 返回由输入算法指定生成的Mac对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
示例:
ini
var mac = createMac("SHA256")
class Mac
kotlin
public class Mac {}
Mac类,调用Mac方法可以进行MAC(Message Authentication Code)加密计算。调用前,需要通过createMac构造Mac实例。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 代表指定的摘要算法名。 |
func init(SymKey)
swift
public func `init`(key: SymKey): Unit
使用对称密钥初始化Mac计算,通过注册回调函数获取结果。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
key | SymKey | 是 | 共享对称密钥。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17630001 | crypto operation error. |
示例:
ini
let skg = createSymKeyGenerator("AES128")
let sk = skg.generateSymKey()
mac.`init`(sk)
func update(DataBlob)
swift
public func update(input: DataBlob): Unit
传入消息进行Mac更新计算。
系统能力: SystemCapability.Security.CryptoFramework
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input | DataBlob | 是 | 传入的消息。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17630001 | crypto operation error. |
示例:
vbscript
let blob = DataBlob("this is test!".toArray())
mac.update(blob)
func doFinal()
swift
public func doFinal(): DataBlob
返回Mac的计算结果。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
DataBlob | 返回计算结果DataBlob。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17620001 | memory error. |
17630001 | crypto operation error. |
示例:
ini
let skg = createSymKeyGenerator("AES128")
let sk = skg.generateSymKey()
mac.`init`(sk)
let blob = DataBlob("this is test!".toArray())
mac.update(blob)
mac.doFinal()
func getMacLength()
swift
public func getMacLength(): UInt32
获取Mac消息认证码的长度(字节数)。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
UInt32 | 返回mac计算结果的字节长度。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17630001 | crypto operation error. |
示例:
ini
let skg = createSymKeyGenerator("AES128")
let sk = skg.generateSymKey()
mac.`init`(sk)
let blob = DataBlob("this is test!".toArray())
mac.update(blob)
mac.doFinal()
var macLen = mac.getMacLength()
func createRandom()
swift
public func createRandom(): Random
生成Random实例,用于进行随机数的计算与设置种子。
系统能力: SystemCapability.Security.CryptoFramework
返回值:
类型 | 说明 |
---|---|
Random | 返回由输入算法指定生成的Random对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17620001 | memory error. |
示例:
ini
let rand = createRandom()
class Random
kotlin
public class Random {}
Random类,调用Random方法可以进行随机数计算。调用前,需要通过createRandom构造Random实例。
属性
系统能力: SystemCapability.Security.CryptoFramework
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
algName | String | 是 | 否 | 代表当前使用的随机数生成算法,目前只支持"CTR_DRBG"。 |
func generateRandom(Int32)
swift
public func generateRandom(len: Int32): DataBlob
生成指定长度的随机数并返回。
系统能力: SystemCapability.Security.CryptoFramework
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
len | Int32 | 是 | 表示生成随机数的长度,单位为byte,范围在[1, INT32_MAX]。 |
返回值:
类型 | 说明 |
---|---|
DataBlob | DataBlob对象。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
401 | invalid parameters. |
17620001 | memory error. |
17630001 | crypto operation error. |
示例:
ini
let rand = createRandom()
let promiseGenerateRand = rand.generateRandom(12)
func setSeed(DataBlob)
swift
public func setSeed(seed: DataBlob): Unit
设置指定的种子。
系统能力: SystemCapability.Security.CryptoFramework
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
seed | DataBlob | 是 | 设置的种子。 |
错误码:
以下错误码的详细介绍请参见crypto 错误码
错误码ID | 错误信息 |
---|---|
17620001 | memory error. |
示例:
scss
let rand = createRandom()
rand.setSeed(randData)
如对您有帮助,帮忙点个"在看 、关注" 让更多的人受益~!
技术交流群可加wx"LB-9191"备注cangjie