我正在尝试实现自己的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);
预先感谢您:)
答案 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
}
}