华为仓颉鸿蒙NEXT原生加解密算法库框架

为屏蔽底层硬件和算法库,向上提供统一的密码算法库加解密相关接口。

👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻

导入模块

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

相关推荐
遇到困难睡大觉哈哈5 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈6 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息6 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈6 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生7 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生7 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky7 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
L、2189 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos
L、21810 小时前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos