首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jni中的ASCII到HEX转换

jni中的ASCII到HEX转换
EN

Stack Overflow用户
提问于 2016-04-14 07:40:58
回答 2查看 609关注 0票数 0

我想我之前的问题不是在pont.So试图解释我到底想要什么。“试图从java加密数据,并在arduino (c)处解密,反之亦然

我在java中尝试过许多3des+ecb加密。我得到了不同的答案,对于不同的code.So,我最终决定使用c代码作为java库,使用jni和iam在arduino端获得正确的answer.so,我也可以使用相同的"C“代码。

现在让我来谈谈重点:

我使用jni(netbeans)将plain_text从java发送到"C“,在那里对数据进行加密,然后”我将从c接收加密数据“(Prob).Then使用c code.Then将数据发送给arduino.DECRYPT,使用c加密从arduino发送一些encrypted数据,然后在另一端(App),我将欺骗并使用它。

我想这是cleare

问题:我不知道如何从c接收正确的密文。

代码语言:javascript
复制
unsigned  char *enc_data_return=(char*)malloc(100);
enc_data_return=tdes_encrypt(32, plain_text, encrypted_text);("tdes_encrypt is the method iam using to encrypt i think that code is not needed here if u want i will send late")

当我打印指针值时,我得到了加密数据的十六进制值(我使用3DEOnline工具进行了检查)。

printf("%2x ",*(enc_data_return+30));

TDES密文块0: 39 85 e3 7 9a e4 eb

密文块1: ca 68 61 8f 31 b6 a5 b

密文块2: 7c ce 23 34 f4 d7 6f 86

密文块3: c1 9f c5 8b a0 c3 d7 82

在十六进制中,获得加密数据的确切值,但当我转换为jstring时,得到99ãäëÊha1¶¥|Î#4ô×o_ŋ Ãׂ,但期望值是99ãäëÊha1¶¥|Î#4ô×oÁÅ,使用下面的代码获得jstring。jstring jstrBuf = (*env)->NewStringUTF(env,enc_data_return);

我尝试使用jbyteArray数组= (*env)->NewByteArray (env,l);(env)->SetByteArrayRegion (env,->SetByteArrayRegion,0,l,(j字节)(Enc_data_return));

面对同样的问题

我不知道如何得到加密的数据,请帮助我。这些加密数据是非ascii或扩展ascii。因此,c端和java端的所有转换器给出错误的values.so,我可以直接从c端发送十六进制值到java。“我猜不可能”,但如果是,请告诉我如果不是,请给我一个解决方案。

请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2016-04-14 11:06:18

3 3DES的明文输入和密文输入是二进制的。因此,创建一个处理字节而不是字符的库是很重要的。要对字符串进行编码,首先应该对文本执行字符编码,创建一个等效的二进制(字节数组)。可能应该优先选择UTF-8。

最好在Java中这样做,没有必要在C中这样做(至少在您的旁边):

代码语言:javascript
复制
"plaintext".toBytes(StandardCharsets.UTF_8);

应该能起作用。

现在,如果您想以字符串的形式发送密文,则需要对字节执行编码。最好为此使用base 64,同样是在Java中:

代码语言:javascript
复制
Base64.getEncoder().encode(ciphertext);

因此,在接收到时,您首先解码基本64,然后解密密文并通过解码UTF-8字符将其转换回字符串,即上述进程反向进行。

如果编码不正确,您可能会在传输过程中丢失数据。例如,控制字符可以从密文中过滤,未知字符可能被删除或转换为替换字符。

除非您确信输入是ASCII,否则在将字符串作为字节直接使用时,可能会发生相同的情况。如果您使用的字符大于126 (127是保留的),您可能会遇到麻烦。

这可能是你目前的问题。

票数 2
EN

Stack Overflow用户

发布于 2016-04-20 06:34:35

最后,我为我的问题找到了答案,我发布了答案,因为它可能有助于other.Convertion从char*到jstring或jbytearray,给出了加密的data.So的错误答案,它更好地获得了thoose values.What的十六进制值,这意味着我刚刚转换为jintarray,并传递了加密数据的路径,我正在接收正确的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36616666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档