我试图通过网络发送RSA公钥,从用c编写的服务器发送到用Java编写的客户端.当客户端收到模数时,它应该使用模数和服务器也在使用的公共指数F4重新创建RSA密钥.
以下是服务器生成和发送密钥的方式:
//Generate RSA key in C
RSA *rsa;
int bits = 1024;
unsigned long exp = RSA_F4;
BIGNUM *bn;
BIGNUM *MyModPubKey;
bn = BN_new();
BN_set_word(bn, exp);
rsa = RSA_new();
RSA_generate_key_ex(rsa, bits, bn, NULL);
MyModPubKey = rsa->n;
//Send RSA modulus in C
unsigned char public_key_Mod[128];
unsigned char *PubMod;
int PubModLen;
PubMod = (unsigned char *)&public_key_Mod;
PubModLen = BN_bn2bin(MyModPubKey, PubMod);
assert(PubModLen == 128);
send(sd, public_key_Mod, 128, 0);
Run Code Online (Sandbox Code Playgroud)
以下是如何在Java中重新创建密钥.省略了异常处理.
//Read the modulus
byte[] public_key_mod = new byte[128];
is.read(public_key_mod, 0, 128);
//Create BigInteger …
Run Code Online (Sandbox Code Playgroud) 我应该知道这一点,但由于某种原因我无法理解这一点。
为什么我不能将对象 List<Object>
列表转换为地图列表List<Map<String, Object>>
?列表中的每个对象都是 type 的对象Map<String, Object>
,那么为什么不能进行转换呢?
我能做的是创建一个new ArrayList<Map<String, Object>>();
并遍历列表并使用演员表添加每个项目。
List<Object> dataList;
..
//Why doesn't this work?
List<Map<String, Object>> rxData = (List<Map<String, Object>>)dataList;
//This works, but is there a better way?
rxData = new ArrayList<Map<String, Object>>();
for (Object data : dataList) {
rxData.add((Map<String, Object>)data);
}
Run Code Online (Sandbox Code Playgroud)