C++ 如何防止文件被篡改
我想将机密数据存储在一个数字签名的文件中,以便我知道其内容何时被篡改 我最初的想法是,数据将存储在NVPs(名称-值对)中,使用某种CRC或其他校验和来验证内容 我想用ANSI C++(</P>)来实现这样一个文件的创建(即编写)和验证(读取)。 假设这是我要存储的数据:C++ 如何防止文件被篡改,c++,encryption,licensing,license-key,C++,Encryption,Licensing,License Key,我想将机密数据存储在一个数字签名的文件中,以便我知道其内容何时被篡改 我最初的想法是,数据将存储在NVPs(名称-值对)中,使用某种CRC或其他校验和来验证内容 我想用ANSI C++()来实现这样一个文件的创建(即编写)和验证(读取)。 假设这是我要存储的数据: //Unencrypted, raw data to be stored in file struct PrivateInfo { double age; weight; Fitne
//Unencrypted, raw data to be stored in file
struct PrivateInfo {
double age; weight;
FitnessScale fitness;
Location loc;
OtherStuff stuff;
};
//128-bit Encrypted Data (Payload to be stored in file)
struct EncryptedData {
// unknown fields/format ??
};
[在我阅读了对这个问题的一些回答之后]
从我到目前为止收到的评论来看,我担心人们会被“许可”这个词所左右,这对大多数人来说似乎是个危险信号。我怀疑可能是这样,但在今天高度安全和普遍紧张的气氛中,我认为我最好详细说明我需要“隐藏”的内容,以免有人认为我在考虑将“核密码”传递给恐怖分子或其他什么东西。我现在将从我的问题中删除“许可证”一词
将其更多地视为一个技术问题。假设我是一名学生(我也是),并且我正试图找出关于编码需要安全的信息的建议(或最佳实践)
考虑到上述情况,我将重新安排我的问题:
呃,为什么不使用像GPG这样的众所周知的加密系统呢?呃,为什么不使用像GPG这样的众所周知的加密系统呢?首先,请注意,“签名”数据(在被篡改时注意)是与“加密”数据(防止其他人阅读)完全独立的操作 也就是说,OpenPGP标准两者兼而有之。GnuPG是一种流行的实现: 基本上你需要:
- 生成密钥对,但不要麻烦发布公共部分
- 对数据进行签名和加密(这是gpg中的单个操作)
- 。。。存储
- 解密并检查签名(这也是一个单独的操作)
- 选择一个较长的随机字符字符串。这是你的钥匙
- 将数据与密钥连接起来。使用安全哈希函数(SHA-256)对此进行哈希。然后将结果散列与数据连接起来,并使用密钥和安全对称密码(AES)对其进行加密
- 。。。存储
- 解密数据,切掉散列值,放回密钥,对其进行散列,并将结果与散列值进行比较,以验证其未被修改
良好的安全性可以避免做其他更聪明的人为你做的工作。这是一种有益的懒惰。首先,请注意,“签名”数据(注意数据何时被篡改)与“加密”数据(防止其他人阅读)是完全独立的操作 也就是说,OpenPGP标准两者兼而有之。GnuPG是一种流行的实现: 基本上你需要:
- 生成密钥对,但不要麻烦发布公共部分
- 对数据进行签名和加密(这是gpg中的单个操作)
- 。。。存储
- 解密并检查签名(这也是一个单独的操作)
- 选择一个较长的随机字符字符串。这是你的钥匙
- 将数据与密钥连接起来。使用安全哈希函数对此进行哈希