Java 对称加密算法

发布于 2024-10-09 17:08:29 字数 2615 浏览 9 评论 0

认证加密 防篡改 AEAD (对敏感数据进行加密,库中的数据或者表中的数据)

常见的 AEAD 算法如下:

AES-128-GCM
AES-192-GCM
AES-256-GCM
ChaCha20-IETF-Poly1305
XChaCha20-IETF-Poly1305

对称加密算法的性能、空间比较

名称    密钥长度        运算速度   安全性   资源消耗
DES     56位            较快      低       中
3DES   112位或 168位      慢       中       高
AES    128、192、256位   快       高       低

使用 google tink 实现 AES 算法

将密钥写入文件

AeadConfig.register();

//Generate the key material...
KeysetHandle keysetHandle = KeysetHandle.generateNew(
    AeadKeyTemplates.AES128_GCM
);

// and write it to a file.
String keysetFilename = "my_keyset.json";
CleartextKeysetHandle.write(keysetHandle, JsonKeysetWriter.withFile(
    new File(keysetFilename)
)
);



读取密钥加密

String plaintext = "napier";
String aad = "qwerty123";

String keysetFilename = "my_keyset.json";
KeysetHandle keysetHandle = CleartextKeysetHandle.read(
    JsonKeysetReader.withFile(new File(keysetFilename)));

Aead aead = keysetHandle.getPrimitive(Aead.class);

byte[] ciphertext = aead.encrypt(plaintext.getBytes(), aad.getBytes());
byte[] encoded = Base64.getEncoder().encode(ciphertext);

System.out.println("\nCipher:\t" + new String(encoded));

读取密钥解谜

try {

    String plaintext = "napier";
    String aad = "qwerty123";

    String keysetFilename = "my_keyset.json";
    KeysetHandle keysetHandle = CleartextKeysetHandle.read(
        JsonKeysetReader.withFile(new File(keysetFilename)));

    Aead aead = keysetHandle.getPrimitive(Aead.class);

//            byte[] ciphertext = aead.encrypt(plaintext.getBytes(), aad.getBytes());
//            byte[] encoded = Base64.getEncoder().encode(ciphertext);
//
//            System.out.println("\nCipher:\t" + new String(encoded));

    byte[] decode = Base64.getDecoder().decode("ASThGz8bDgORDUWhqlRyIYLXAbNzq+Hq8u+iqHefoVzzBBTCg2nP");

    byte[] decrypted = aead.decrypt(decode, aad.getBytes());
    String s = new String(decrypted);
    System.out.println("\nDecrypted:\t" + s);
    System.out.println("\nPrinting out key:");
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    CleartextKeysetHandle.write(keysetHandle, JsonKeysetWriter.withOutputStream(outputStream));
    System.out.println("\n" + new String(outputStream.toByteArray()));
} catch (GeneralSecurityException e) {
    System.out.println(e);
    System.exit(1);
}

网络传输敏感信息加密解密 AES+RSA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文