【问题标题】:How do you encrypt data using a key file in java?如何在 java 中使用密钥文件加密数据?
【发布时间】:2016-07-05 05:31:58
【问题描述】:

我正在尝试制作一个程序,该程序使用 RSA 加密来加密和解密发送到和从多台计算机发送的数据。我有一个文件夹,用于在我的计算机上存储其他计算机的公钥。但是,我似乎无法加载此密钥文件并创建一个指向它的 publicKey 对象。我目前的尝试如下所示,但我想知道其他人使用什么方法来做到这一点?

      //Returns the key of a friend (given as input)

  public PublicKey getFriendsKey(String friend){
    try{ObjectInputStream friendsKeyInput = new ObjectInputStream(new fileInputStream(programLocation + "/Text Files/encryptionKeys/" + friend + "PublicKey.key"));
    PublicKey friendsKey = friendsKeyInput.readObject();
    }
    catch(Exception e){e.printStackTrace();}
    return friendsKey;
  }

【问题讨论】:

  • 您是否了解数据长度仅限于密钥长度并且比对称密码慢 100 到 1000 倍?该数据通常使用对称算法(如 AES)加密?
  • @zaph:实际上密钥长度减去至少 11 个八位字节用于填充/随机化,尽管现在密钥大多(必须是)至少 2048 位 = 256 八位字节,这相对不太重要。 OP:告诉我们文件是如何生成的,和/或发布一个示例文件(或几个,如果它们不完全相似);如果不是文本,请使用十六进制转储。
  • @dave_thompson_085 我知道,但为了避免争论(我在这里失败了),我小心地说“限制在密钥长度”,这是真的。如果我考虑到填充,我会因为原始数据功能而受到抨击。在我的评论中,我想指出非对称加密的数据大小是有限制的,这似乎是相关的,因为 OP 声明的文件可能大于密钥大小 - 填充 - 无论如何,我不想进入填充问题。

标签: java encryption key rsa


【解决方案1】:

为什么要使用 ObjectInputStream?很可能您的密钥不是serializable java object。 看到这个答案。 Load RSA public key from file

【讨论】:

  • #11410070 涵盖了 SPKI(Java 称之为 X509EncodedKey)以及可能使用 BC 的 一些 其他 PEM,但不是完整的 X509 证书(甚至是包含证书的 PKCS7)或 OpenSSH 格式非常不同的公钥,或者非常不同的(开放)PGP格式公钥,或者各种ad-hoc二数格式。
猜你喜欢
  • 1970-01-01
  • 2021-02-02
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多