Java-将消息编码为字符串

Java-将消息编码为字符串,java,rest,encryption,httprequest,rsa,Java,Rest,Encryption,Httprequest,Rsa,我正在尝试为HTTP请求实现我自己的授权版本。现在我面临着一个我不知道如何解决的问题 如下面的代码所示,我正在使用RSA算法加密字符串消息。但问题是,结果是我得到了类SealedObject的对象。我需要有可能使用这个加密字符串作为标题-现在使用REST客户端,比如Postman。所以,我的问题是:如何将SealedObject解析为String?或者我应该如何将消息加密到字符串?这可能吗 KeyPairGenerator kpg = KeyPairGenerator.getInstance("

我正在尝试为HTTP请求实现我自己的授权版本。现在我面临着一个我不知道如何解决的问题

如下面的代码所示,我正在使用RSA算法加密字符串消息。但问题是,结果是我得到了类
SealedObject
的对象。我需要有可能使用这个加密字符串作为标题-现在使用REST客户端,比如Postman。所以,我的问题是:如何将
SealedObject
解析为
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);

提前感谢:)

首先想到的是:

SealeObject是一个可序列化对象,这意味着您可以将其转换为字节,然后使用Base64将其转换为字符串: 大概是这样的:

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
  }
然后,当您收到请求时,执行以下操作:

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
  }

}

使用序列化接口