java - 当 DatatypeConverter.printHexBinary 将我的字节数组中的字节数加倍时该怎么办?
问题描述
我正在尝试使用安全服务器建立通信协议。服务器在某些时候等待我的长度为 128 字节的非对称加密对称密钥字节数组,但是在我使用 DatatypeConverter.printHexBinary 将字节数组转换为字符串之后,在我使用它之后,它的数量增加了一倍数组中的字节。我想知道为什么会发生这种情况以及如何解决?
使用不同类型的方法将 byte[] 解析为 String,但服务器无法识别它们。
这是我正在使用的代码:
**注:公钥由服务器在发送数字证书时发送。
对于密码:
private static byte[] cifradoAsimetrico(SecretKey key, PublicKey publicKey) {
byte[] cipheredText;
try {
Cipher cipher = Cipher.getInstance(asimetrico);
byte[] clearText = key.getEncoded();
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
cipheredText = cipher.doFinal(clearText);
return cipheredText;
} catch (Exception e) {
System.out.println("[Exception] Method cifradoAsimetrico( ): " + e.getMessage());
return null;
}
}
对于通信协议:
keyGenerator = KeyGenerator.getInstance(simetrico,new BouncyCastleProvider());
keyGenerator.init(128);
desKey = keyGenerator.generateKey();
byte[] llaveCifrada = cifradoAsimetrico(desKey, publicaServidor);
System.out.println("Tamaño cifrada: " + llaveCifrada.length);
String llaveCifradaHexa = DatatypeConverter.printHexBinary(llaveCifrada);
System.out.println("Tamaño hexa: "+llaveCifradaHexa.getBytes().length);
socketPrintWriter.println(llaveCifradaHexa);
//Algo en el código estágenerando un problema y el tamaño de lo que se envía es de 256 bytes, //por eso el servidor no lo recibe。没有 PUDIMOS ENCONTRAR LA RAZÓN。
//服务器停到这里,显示一个非法块大小异常数据不能超过128字节
解决方案
推荐阅读
- django-rest-framework - Resource 中传递的动态字段
- dataweave - dataweave fetch first char from array elements
- android - 手机重启后重新启动应用程序
- unit-testing - 如何打开 7.6.0 版的 cypress runner?
- flutter - 我正在尝试使用 google youtube API 在颤振应用程序中访问我的 youtube 频道的视频。但它给出了以下错误
- random - 在房间中随机放置方块
- node.js - PUT 方法在 Node express 应用程序中仅工作 6 次
- javascript - 在 InDesign 中设置活动页码
- php - PHP 上的 Avro 编码器/解码器 - 如何在没有架构本身的情况下发送编码的二进制数据?
- reactjs - Formik:如何为 fieldArray 设置初始值