0

我有一个如下结构:

struct mydata
{
    int a,
    int b,
 }

我想在 Windows 中填写它,然后将其发送给某人在 Linux 中阅读。我正在编写这两个应用程序。

目的是中间的用户应该不能更改数据,但他可以读取它。

用户可以访问 Linux 代码的源代码,但不能访问 Windows 应用程序。

我的问题是:

1-我该怎么做?我的第一个想法是从结构中创建一个散列,用私钥/公钥对其进行加密并发送给用户(在 Windows 中)。在 Linux 上解密它并检查是否有代码匹配数据。这是最好的解决方案吗?

2-我可以使用什么类型的库?该库应该在 Windows 和 Linux 上可用。

3-是否有任何示例代码可以给我一个起点?

编辑 1

问题更多是关于如何确保数据在 Windows 系统和 Linux 之间通过文件复制(文件在 sd 卡上或通过电子邮件)传输时不被篡改。所以问题更多是关于如何确保数据是防篡改的,而不是如何传输它。

编辑 2

我需要将数据作为写入文件的结构发送到 Linux 系统(Linux 上的应用程序读取二进制文件,映射到结构然后由应用程序使用)。因此,我有效地将它作为 Windows 上的结构,然后我需要对其进行签名并将其写入文件并发送到 Linux 计算机。在 Linux 计算机上,应用程序需要读取它,检查它是否被篡改,然后使用数据。

我的问题是如何签署数据。

4

2 回答 2

0

1.) 通过网络和套接字

2.) POSIX 套接字 API,类似于 windows 和 linux,首先忘记加密

3.) http://beej.us/guide/bgnet/

于 2013-11-07T10:17:55.457 回答
0

首先,您需要找到一种方法将结构内容编码/解码为可能与平台无关的字节数组(就字节顺序而言,32/64 位,字符串编码......)。您应该仔细查看ASN.1。ASN.1 旨在提供明确且独立于软件和硬件的数据编码。有多个库提供 ASN.1 编码器和解码器,例如OpenSSLBoost(即使并不总是有很好的文档记录)

为了防篡改,RFC 5652中指定了一个名为 CMS(加密消息语法,又名 PKCS#7)的消息交换加密标准。该标准定义了多种提供防篡改功能的消息类型:签名数据和认证数据。OpenSSL 仅支持签名数据消息签名数据需要公钥加密。Authenticated-data 更易于使用,因为它只需要共享一个公共密钥。即使我不知道支持认证数据的库。

于 2013-11-10T11:45:34.310 回答