static void SetKeyLength(HcfAlgParaValue value, void *cipher) { CipherAttr *cipherAttr = (CipherAttr *)cipher; cipherAttr->keySize = value; switch (value) { case HCF_ALG_AES_128: case HCF_ALG_AES_192: case HCF_ALG_AES_256: cipherAttr->algo = HCF_ALG_AES; break; case HCF_ALG_3DES_192: cipherAttr->algo = HCF_ALG_DES; break; case HCF_OPENSSL_RSA_512: case HCF_OPENSSL_RSA_768: case HCF_OPENSSL_RSA_1024: case HCF_OPENSSL_RSA_2048: case HCF_OPENSSL_RSA_3072: case HCF_OPENSSL_RSA_4096: case HCF_OPENSSL_RSA_8192: cipherAttr->algo = HCF_ALG_RSA; break; default: LOGE("Invalid algo %u.", value); break; } }代码解析
时间: 2024-02-14 22:36:03 浏览: 70
这段代码定义了一个名为 "SetKeyLength" 的静态函数,该函数接受两个参数:一个是 HcfAlgParaValue 类型的值,另一个是 void 指针类型的 cipher。cipher 在函数内部被转换为 CipherAttr 指针类型。
函数实现中,将传入的 value 赋值给 cipherAttr 指向的 CipherAttr 结构体的 keySize 成员变量。然后根据 value 的值,判断算法类型并赋值给 cipherAttr 指向的 CipherAttr 结构体的 algo 成员变量。最后,如果 value 的值不属于预定义的算法类型,则输出一条错误日志。
在代码中,HCF_ALG_AES_128、HCF_ALG_AES_192、HCF_ALG_AES_256、HCF_ALG_3DES_192、HCF_OPENSSL_RSA_512、HCF_OPENSSL_RSA_768、HCF_OPENSSL_RSA_1024、HCF_OPENSSL_RSA_2048、HCF_OPENSSL_RSA_3072、HCF_OPENSSL_RSA_4096、HCF_OPENSSL_RSA_8192 都是预定义的常量。
相关问题
java程序部署到linux服务器时aes加密报错Illegal key size or default parameters
当Java程序在Linux服务器上运行时,如果使用AES加密并使用256位密钥,则可能会出现“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。这是因为默认情况下,Java不允许使用256位密钥进行加密。要解决此问题,需要执行以下步骤:
1.下载Java Cryptography Extension (JCE) Unlimited Jurisdiction Policy Files。这些文件包含允许使用256密钥的策略文件。
2.解压缩下载的文件,并将其中的两个JAR文件(local_policy.jar和US_export_policy.jar)复制到$JAVA_HOME/jre/lib/security目录中。如果该目录中已经存在这些文件,请备份它们并替换为新文件。
3.重新启动Java应用程序并尝试使用256位密钥进行AES加密。
下面是一个示例代码,演示如何使用256位密钥进行AES加密:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesEncryptionExample {
private static final String ALGORITHM = "AES";
private static final String KEY = "0123456789abcdef0123456789abcdef";
public static String encrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedValue = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encryptedValue);
}
public static String decrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decodedValue = Base64.getDecoder().decode(value);
byte[] decryptedValue = cipher.doFinal(decodedValue);
return new String(decryptedValue);
}
public static void main(String[] args) throws Exception {
String originalValue = "Hello World!";
String encryptedValue = encrypt(originalValue);
String decryptedValue = decrypt(encryptedValue);
System.out.println("Original Value: " + originalValue);
System.out.println("Encrypted Value: " + encryptedValue);
System.out.println("Decrypted Value: " + decryptedValue);
}
}
```
阅读全文