Encryption SDK is a client-side encryption library and is used with Key Management Service (KMS). これにより、データの暗号化、データの復号化、署名の生成、署名の検証を行うことができます。 このトピックでは、Encryption SDK for Javaを使用してデータを暗号化および復号化する方法について説明します。
このタスクについて
For more information about sample code, visit alibabacloud-encryption-sdk-java.
オンプレミスマシンに暗号化SDKをインストールする
MavenリポジトリからのEncryption SDKのインストール
プロジェクトにalibabacloud-encryption-sdk-javaの依存関係を追加します。 その後、プロジェクトは公開されたEncryption SDKのJavaパッケージをMavenリポジトリから自動的にダウンロードできます。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-encryption-sdk-java</artifactId>
<version>1.0.x</version>
</dependency>
注 The latest version of Encryption SDK is 1.0.7. バージョンの詳細については、Alibaba Cloud Encryption SDK For Javaをご参照ください。
データの暗号化と復号化の例
- バイト配列型のデータを暗号化および復号化します。
publicクラスBasicEncryptionExample { private static final String ACCESS_KEY_ID = "<AccessKeyId>"; プライベート静的ファイナル文字列ACCESS_KEY_SECRET = "<AccessKeySecret>"; プライベート静的最終文字列CMK_ARN = "acs:kms:RegionId:UserId:key/CmkId"; プライベート静的最終バイト [] PLAIN_TEXT = "Hello World".getBytes(StandardCharsets.UTF_8); public static void main(String[] args) { // 1. Alibaba Cloudにアクセスするためのパラメーターを設定します。 AliyunConfig config = new AliyunConfig(); config.withAccessKey(ACCESS_KEY_ID、ACCESS_KEY_SECRET); // 2. SDKオブジェクトを作成し、Alibaba Cloudへのアクセスに使用するパラメーターを指定します。 AliyunCrypto aliyunSDK = new AliyunCrypto(config); // 3. データキーまたは署名を提供するプロバイダーを作成します。 BaseDataKeyProvider provider = new DefaultDataKeyProvider(CMK_ARN); // アルゴリズムを設定します。 デフォルトのアルゴリズムはAES_GCM_NOPADDING_256です。 //provider.setAlgorithm(CryptoAlgorithm.SM4_GCM_NOPADDING_128); // 4. Configure the encryption context. Map<String, String> encryptionContext = new HashMap<>(); encryptionContext.put("one", "one"); encryptionContext.put("two" 、"two"); // 5. EncryptおよびDecrypt操作を呼び出します。 CryptoResult<byte[]> cipherResult = aliyunSDK.encrypt(provider, PLAIN_TEXT, encryptionContext); CryptoResult<byte[]> plainResult = aliyunSDK.de crypt(provider, cipherResult.getResult()); Assert.assertArrayEquals(PLAIN_TEXT, plainResult.getResult()); } }
注- 完全なコードの詳細については、SimpleEncryptAndDecryptSample.javaをご参照ください。
- AccessKey IDとAccessKeyシークレットの取得方法の詳細については、「AccessKey ペアの取得」をご参照ください。
- バイトストリーム型のデータを暗号化および復号化します。
public class FileStreamSample { プライベート静的最終文字列FILE = "README.md"; // accessKeyId accessKeySecret プライベート静的ファイナル文字列ACCESS_KEY_ID = "<AccessKeyId>"; プライベート静的ファイナル文字列ACCESS_KEY_SECRET = "<AccessKeySecret>"; // ログシステム。 プライベート静的最終ロガーLogger=LoggerFactory.getLogger(FileStreamSample.class); // Alibaba Cloud Resource Name (ARN) 形式のカスタマーマスターキー (CMK) のID。 private static final String CMK_ARN = "acs:kms:RegionId:UserId:key/CmkId"; public static void main(String[] args) throws IOException { AliyunConfig config = new AliyunConfig(); config.withAccessKey(ACCESS_KEY_ID、ACCESS_KEY_SECRET); encryptStream(config); decryptStream(config); Assert.assertEquals(getFileMD5(FILE), getFileMD5(FILE + ".decrypted")); } private static void encryptStream(AliyunConfig config) がIOException { // 1. SDKオブジェクトを作成し、Alibaba Cloudへのアクセスに使用するパラメーターを指定します。 AliyunCrypto aliyunSDK = new AliyunCrypto(config); // 2. 暗号化コンテキストを設定します。 final Map<String, String> encryptionContext = new HashMap<>(); encryptionContext.put("this" 、"context"); encryptionContext.put("あなたを助けることができます" 、"確認する"); encryptionContext.put("this data" 、"is your original data"); // 3. データキーを提供するプロバイダーを作成します。 BaseDataKeyProviderプロバイダー=新しいDefaultDataKeyProvider(CMK_ARN); // 4. 入力ストリームと出力ストリームを作成します。 FileInputStream inputStream=新しいFileInputStream(FILE); FileOutputStream outputStream=新しいFileOutputStream(FILE + ".encrypted"); // 5. Encrypt操作を呼び出します。 try { aliyunSDK.encrypt(provider, inputStream, outputStream, encryptionContext); } catch (InvalidAlgorithmException e) { System.out.println("Failed."); System.out.println("エラーメッセージ:" + e.getMessage()); } } private static void decryptStream(AliyunConfig config) throws IOException { // 1. SDKオブジェクトを作成し、Alibaba Cloudへのアクセスに使用するパラメーターを指定します。 AliyunCrypto aliyunSDK = new AliyunCrypto(config); // 2. データキーを提供するプロバイダーを作成します。 BaseDataKeyProviderプロバイダー=新しいDefaultDataKeyProvider(CMK_ARN); // 3. 入力ストリームと出力ストリームを作成します。 FileInputStream inputStream=新しいFileInputStream(FILE + ".encrypted"); FileOutputStream outputStream=新しいFileOutputStream(FILE + ".decrypted"); // 4. Call the Decrypt operation. try { aliyunSDK.de crypt (プロバイダー、inputStream、outputStream); } catch (InvalidAlgorithmException e) { System.out.println("Failed."); System.out.println("エラーメッセージ:" + e.getMessage()); } } プライベート静的文字列getFileMD5(String fileName) { ファイルファイル=新しいファイル (fileName); if (!file.isFile()) { ヌルを返します。 } MessageDigest digest; byte[] buffer = new byte[4096]; try (FileInputStream in = new FileInputStream (ファイル)){ digest = MessageDigest.getInstance("MD5"); int len; while ((len = in.read(buffer)) != -1) { digest.update (バッファ、0、len); } を返しますHex.encodeHexString(digest.digest()); } catch (例外e) { e.printStackTrace(); } ヌルを返します。 } }