尝试着使用了, Crypto Architecture Kit 中的 3DES 发现加解密和java不一样,请教下,对于下面的加解密方法该怎么翻译成 ArkTS ?
import org.apaches.commons.codec.binary.Base64
import java.net.URLEncoder
import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.SecretKey
import javax.crypto.SecretKeyFactory
import javax.crypto.spec.DESKeySpec
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
object SecurityUtil {
//加密
fun encryptByDES(data: String, password: String): String? {
val cipher = Cipher.getInstance("DES")
val datasource: ByteArray = data.toByteArray()
val random = SecureRandom()
val desKey = DESKeySpec(password.toByteArray())
val keyFactory: SecretKeyFactory = SecretKeyFactory.getInstance("DES")
val securekey: SecretKey = keyFactory.generateSecret(desKey)
cipher.init(Cipher.ENCRYPT_MODE, securekey, random)
return Base64.encodeBase64String(cipher.doFinal(datasource))
}
//解密
fun decryptByDES(srcc: String, password: String): ByteArray? {
val src = Base64.decodeBase64(srcc)
val random = SecureRandom()
// 创建一个DESKeySpec对象
val desKey = DESKeySpec(password.toByteArray())
// 创建一个密匙工厂
val keyFactory = SecretKeyFactory.getInstance("DES")
// 将DESKeySpec对象转换成SecretKey对象
val securekey = keyFactory.generateSecret(desKey)
// Cipher对象实际完成解密操作
val cipher = Cipher.getInstance("DES")
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, random)
return cipher.doFinal(src)
}
}
3DES算法的加解密过程分别是对明文/密文数据进行三次DES加密或解密,得到相应的密文或明文。参考链接:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-sym-encrypt-decrypt-spec-V5\#section3des
目前支持3DES,还不支持DES(DES是不安全算法)。
三方库也可以实现DES的加解密,三方库参考链接:
https://ohpm.openharmony.cn/\#/cn/detail/@ohos%2Fcrypto-js
三方库支持的算法的相关demo链接:
https://gitee.com/openharmony-sig/crypto-js/blob/master/entry/src/main/ets/pages/Index.ets
解决方案参考:
https://gitee.com/openharmony-sig/crypto-js/issues/IAC3PF