java.security.InvalidKeyException: Illegal key size or default parameters
,那么我们需要补充 Oracle 的 JCE 无政策限制权限文件,将其部署在 JRE 的环境中。 请根据目前使用的 JDK 版本,分别下载对应的文件,将其解压后保存在 JAVA_HOME 下的 jre/lib/security
目录下。// 初始化用户身份信息(secretId, secretKey)// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.tencentcloud.com/cam/capi 进行查看和管理String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 设置存储桶地域,COS 地域的简称请参照 https://www..com/document/product/436/6224ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));// 为防止请求头部被篡改导致的数据无法解密,强烈建议只使用 https 协议发起请求。clientConfig.setHttpProtocol(HttpProtocol.https);// 用户 KMS 服务的主密钥String cmk = "XXXXXXX";//// 如果 KMS 服务的地域 与 COS 的存储桶地域不一致则需要单独设置。//String kmsRegion = "XXXXX";// 初始化 KMS 加密材料KMSEncryptionMaterials encryptionMaterials = new KMSEncryptionMaterials(cmk);// 使用 AES/GCM 模式,并将加密信息存储在文件元信息中.CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption).withStorageMode(CryptoStorageMode.ObjectMetadata);//// 如果 KMS 服务的地域 与 COS 的地域不一致,则在加密配置里指定 KMS 服务的地域//cryptoConf.setKmsRegion(kmsRegion);//// 如果需要可以为 KMS 服务的 cmk 设置对应的描述信息。// encryptionMaterials.addDescription("yourDescKey", "yourDescValue");// 生成加密客户端 EncryptionClient, COSEncryptionClient 是 COSClient 的子类, 所有 COSClient 支持的接口他都支持。// EncryptionClient 覆盖了 COSClient 上传下载逻辑,操作内部会执行加密操作,其他操作执行逻辑和 COSClient 一致COSEncryptionClient cosEncryptionClient =new COSEncryptionClient(new COSStaticCredentialsProvider(cred),new KMSEncryptionMaterialsProvider(encryptionMaterials), clientConfig,cryptoConf);// 上传文件// 这里给出 putObject 的示例, 对于高级 API 上传,只用在生成 TransferManager 时传入 COSEncryptionClient 对象即可String bucketName = "examplebucket-1250000000";String key = "exampleobject";File localFile = new File("localFilePath");PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);cosEncryptionClient.putObject(putObjectRequest);cosEncryptionClient.shutdown();
// 初始化用户身份信息(secretId, secretKey)// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.tencentcloud.com/cam/capi 进行查看和管理String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 设置存储桶地域,COS 地域的简称请参见 https://www..com/document/product/436/6224ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));// 生成对称密钥,您可以将其保存在文件中KeyGenerator symKeyGenerator = KeyGenerator.getInstance("AES");symKeyGenerator.init(256);SecretKey symKey = symKeyGenerator.generateKey();EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);// 使用 AES/GCM 模式,并将加密信息存储在文件元数据中CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption).withStorageMode(CryptoStorageMode.ObjectMetadata);// 生成加密客户端 EncryptionClient,COSEncryptionClient 是 COSClient 的子类, 所有 COSClient 支持的接口他都支持。// EncryptionClient 覆盖了 COSClient 上传下载逻辑,操作内部会执行加密操作,其他操作执行逻辑和 COSClient 一致COSEncryptionClient cosEncryptionClient =new COSEncryptionClient(new COSStaticCredentialsProvider(cred),new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfig,cryptoConf);// 上传文件// 这里给出 putObject 的示例, 对于高级 API 上传,只用在生成 TransferManager 时传入 COSEncryptionClient 对象即可String bucketName = "examplebucket-1250000000";String key = "exampleobject";File localFile = new File(localFilePath);PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);cosEncryptionClient.putObject(putObjectRequest);cosEncryptionClient.shutdown();
// 初始化用户身份信息(secretId, secretKey)// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.tencentcloud.com/cam/capi 进行查看和管理String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 设置存储桶地域,COS 地域的简称请参见 https://www.tencentcloud.com/document/product/436/6224ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));// 生成非对称密钥KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");SecureRandom srand = new SecureRandom();keyGenerator.initialize(1024, srand);KeyPair asymKeyPair = keyGenerator.generateKeyPair();EncryptionMaterials encryptionMaterials = new EncryptionMaterials(asymKeyPair);// 使用 AES/GCM 模式,并将加密信息存储在文件元数据中CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption).withStorageMode(CryptoStorageMode.ObjectMetadata);// 生成加密客户端 EncryptionClient, COSEncryptionClient 是 COSClient 的子类, 所有COSClient 支持的接口他都支持。// EncryptionClient 覆盖了 COSClient 上传下载逻辑,操作内部会执行加密操作,其他操作执行逻辑和 COSClient 一致COSEncryptionClient cosEncryptionClient =new COSEncryptionClient(new COSStaticCredentialsProvider(cred),new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfig,cryptoConf);// 上传文件// 这里给出 putObject 的示例,对于高级 API 上传,只用在生成 TransferManager 时传入 COSEncryptionClient 对象即可String bucketName = "examplebucket-1250000000";String key = "exampleobject";File localFile = new File(localFilePath);PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);cosEncryptionClient.putObject(putObjectRequest);cosEncryptionClient.shutdown();
本页内容是否解决了您的问题?