【问题标题】:Right way to do encryption in java在java中进行加密的正确方法
【发布时间】:2017-12-21 00:46:33
【问题描述】:

我对加密的东西完全陌生,我对 java 中的加密有一些疑问 我曾经在java中为RSA加密做这个

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPTION_MODE,publicKey);
byte result = cipher.doFinal(data);

与使用 AES 的方法相同,我使用此代码生成 AES 密钥

SecureRandom random = new SecureRandom();
byte [] key = new byte [16];
random.nextByte(key);
SecretKeySpec secretKey = new SecretKeySpec(key,"AES");

但正如我在其他程序代码中看到的那样,这不是他们使用加密的方式,我总是看到他们在 AES 中使用一些东西作为 IV 参数,他们从不使用“AES”或“RSA”来获取密码实例。 我用来加密数据的方式安全吗? 我确定我错过了什么

更新:

我还有一个关于在 AES 加密中更改数据大小的问题,我使用 AES 加密数据的方式将数据大小从 1024 更改为 1040

    byte key [] = new byte[16];
    SecureRandom random = new SecureRandom();
    random.nextBytes(key);
    SecretKeySpec keySpec = new SecretKeySpec(key,"AES");
    Cipher c = Cipher.getInstance("AES");
    c.init(Cipher.ENCRYPT_MODE,keySpec);
    FileInputStream in = new FileInputStream("test.txt");
    byte [] buffer = new byte[1024];
    byte [] encrypted;
    while (in.read()>0){
        encrypted = c.doFinal(buffer);
        System.out.println(encrypted.length);
    }

输出是: 1040 1040 . . 1040

简单加密的数据大小总是比原始数据多 16 个字节 我必须处理这个还是因为我使用 Cipher.getInstance("AES");

【问题讨论】:

  • 我认为这个基本的或教程的问题太宽泛了。但由于它们有时会吸引好的答案,我会推迟投票。在线上有许多出色的资源,您可以使用它们来加快速度。
  • Spring 安全
  • 这个太宽泛了。密码学是一个复杂的问题,您必须在尝试对其进行编程之前了解它,至少如果您希望保持安全。例如,您需要了解IV 是什么以及为什么使用它。暂时少写代码,多读书。
  • 一般:数据使用 AES 加密,密钥使用 RSA 加密。 AES 加密和解密只有一个密钥,速度快且没有数据大小限制。 RSA 有两个密钥(一个用于加密,另一个用于解密),速度非常慢,并且数据大小限制小于密钥大小。

标签: java encryption aes rsa


【解决方案1】:

这不是推荐的方式,您需要更改它。您可能希望更好地了解 StackOverflow。您的问题已在此帖子How to encrypt String in Java 中直接回答。

确保您进一步深入了解所有答案。例如this one will probably help you to understand 更多。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多