Java-将消息编码为字符串

时间:2018-11-19 20:55:34

标签: java rest encryption httprequest rsa

我正在尝试实现自己的HTTP请求授权版本。现在我遇到了一个我不知道该如何解决的问题。

如下面的代码所示,我正在使用RSA算法加密String消息。但是问题在于,结果是我得到了类SealedObject的对象。我需要使用此加密字符串作为标头-现在使用诸如Postman之类的REST客户端。因此,我的问题是:如何将SealedObject解析为String?或者我应该怎么做才能加密发给String的消息?这有可能吗?

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = kpg.generateKeyPair();

String message = "Secret message";

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());

SealedObject encryptedMessage = new SealedObject(message, cipher);

预先感谢您:)

1 个答案:

答案 0 :(得分:1)

首先想到的是:

SealedObject是可序列化的对象,这意味着您可以将其转换为字节,然后使用Base64将其转换为String: 像这样的东西:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
  out = new ObjectOutputStream(bos);   
  out.writeObject(sealedObject);
  out.flush();
  byte[] yourBytes = bos.toByteArray();
  String base64StringHeader = Base64.encodeBase64String(yourBytes);
} finally {
  try {
    bos.close();
  } catch (IOException ex) {
    // ignore close exception
  }
}

,然后在收到请求时执行以下操作:

byte[] backToBytes = Base64.decodeBase64(base64StringHeader);
ByteArrayInputStream bis = new ByteArrayInputStream(backToBytes);
ObjectInput in = null;
try {
  in = new ObjectInputStream(bis);
  SealedObject = in.readObject(); 
  ...
} finally {
  try {
    if (in != null) {
      in.close();
    }
  } catch (IOException ex) {
    // ignore close exception
  }

}