在Java中使用强大的加密和哈希算法

如果需要在系统中存储敏感数据,则必须确保已适当加密。 首先,您需要确定所需的加密类型,例如对称或非对称。 另外,您需要选择安全性。 更强的加密需要更多时间,并消耗更多CPU。 最重要的部分是您不需要自己实施加密算法。 加密很困难,并且受信任的库可以为您解决加密问题。

If, for instance, we want to encrypt something like credit card details, we probably need a symmetric algorithm, because we need to be able to retrieve the original number. Say we use the Advanced Encryption Standard (AES), which is currently the standard symmetric encryption algorithm for US federal organizations. To encrypt and decrypt, there is no reason to deep-dive into into low level Java crypto. We recommend that you use a library that does the heavy lifting for you. For example, Google Tink.


   com.google.crypto.tink
   tink
   1.3.0-rc3

下面是一个简短的示例,说明如何使用带有AES的关联数据身份验证加密(AEAD)。 这使我们能够加密纯文本并提供应进行身份验证但未加密的关联数据。

private void run() throws GeneralSecurityException {
   AeadConfig.register();
   KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES256_GCM);

   String plaintext = "I want to break free!";
   String aad = "Queen";

   Aead aead = keysetHandle.getPrimitive(Aead.class);
   byte[] ciphertext = aead.encrypt(plaintext.getBytes(), aad.getBytes());
   String encr = Base64.getEncoder().encodeToString(ciphertext);
   System.out.println(encr);

   byte[] decrypted = aead.decrypt(Base64.getDecoder().decode(encr), aad.getBytes());
   String decr = new String(decrypted);
   System.out.println(decr);
}

Password encryption

对于密码,使用单向加密比较安全,因为我们不需要检索原始密码,而只需匹配散列即可。BCrypt而且,他的救助,脚本最适合这份工作。 两者都是加密散列(单向函数)和计算量大的算法,它们消耗大量时间。 这正是您想要的,因为蛮力攻击需要很长一段时间。

Spring安全性为各种算法提供了出色的支持。 尝试使用SCryptPasswordEncoder和BCryptPasswordEncoderSecurity Security 5提供的用于密码哈希的功能

今天的强加密算法可能是一年后的弱算法。 因此,需要定期检查加密,以确保您使用正确的算法来完成工作。 将经过审查的安全性库用于这些任务,并使库保持最新。

This was just 1 of 10 Java security best practices. Take a look at the full 10 and the easy printable one-pager available

from: https://dev.to//brianverm/use-strong-encryption-and-hashing-algorithms-in-java-280h

你可能感兴趣的:(在Java中使用强大的加密和哈希算法)