首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串<-> byte[]转换

字符串<-> byte[]转换
EN

Stack Overflow用户
提问于 2015-09-18 14:02:55
回答 1查看 1.2K关注 0票数 0

我正在实现一个使用libcraftercrypto++在网络上传输特定帧的系统。但我遇到的问题根本就不在这个层次上。

它是关于在这些库中使用的类型之间的转换。

1)在排放(已解决)

我正在尝试将Crafter::byte array转换为std::string,以便将此消息放入网络帧(作为AES加密/解密的初始化向量)。

此外,必须对iv进行零化,而且我无法正确地初始化它(不管答案是这里还是那里)。

编辑:要将其初始化为00,我必须在十六进制:0x30中执行。为了将其转换为std::string,我必须提供长度(即ivLen2 )(谢谢您的回答)。

我要做的是:

代码语言:javascript
复制
const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x30, 0x30}; // crypto salt of 2 bytes at 0.

std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

string mess2send = ivStr + encrypted_message;

如果我展示它们,用这个:

代码语言:javascript
复制
cout<<"iv[0] : "<<iv[0]<<endl;            // display 0
cout<<"mess2send : "<<mess2send<<endl;    // display 00whatever

为什么我不简单地创建一个零字符串并发送呢?为了有通用函数和可重用的代码。

2)在接待处(待定)

没有意外,我不得不做相反的事情。我得到一个ivmessage连接在一个vector<byte>* payload中,我必须将这个iv提取为一个byte array,并将message提取到一个字符串中。

message并不是真正的问题,因为std::string已经接近vector了。

下面是我尝试检索iv的方法:

代码语言:javascript
复制
Crafter::byte iv[ ivLen2 ];
for (int i = 0; i < ivLen2; i++)
{
    iv[i] = (byte)payload->at(i);
}
std::string iv_rcv( reinterpret_cast< char const* >(iv) ) ;

为了显示它们,我做了(在同一个循环中):

代码语言:javascript
复制
cout<<iv[i];

但它给了我一个非ASCII的角色。

我也尝试过这样做(下面是的答案):

代码语言:javascript
复制
Crafter::byte* iv;

std::string iv_rcv( payload->begin(), payload->begin()+ivLen2 ) ;
iv = (byte*)iv_rcv.c_str();

但它并没有给我假定的初始化值..。

有人有线索吗?我的代码错了吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 14:11:42

我认为这行不通:

代码语言:javascript
复制
const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x00, 0x00}; // crypto salt of 2 bytes

std::string ivStr( reinterpret_cast< char const* >(iv) ) ;

std::string如何知道要从iv指针复制多少数据?

您必须使用一个构造函数来获取数据的长度,如下所示:

代码语言:javascript
复制
std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

指针仅构造函数用于以空字符结尾的特定编码字符串。除非你使用的是其中之一,否则你必须通过长度。

试试这个:

代码语言:javascript
复制
const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x00, 0x00}; // crypto salt of 2 bytes

std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

std::string mess2send = ivStr + encrypted_message;

std::cout << (int)mess2send[0] << (int)mess2send[1] << mess2send.substr(2) << '\n';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32653999

复制
相关文章

相似问题

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