Encryption 自验证加密字符串-该方法可行吗?
我有一个钥匙串,它允许客户拥有额外的功能 显然,我希望软件检查这个字符串是否有效,并且没有修改 以下想法可行吗Encryption 自验证加密字符串-该方法可行吗?,encryption,checksum,Encryption,Checksum,我有一个钥匙串,它允许客户拥有额外的功能 显然,我希望软件检查这个字符串是否有效,并且没有修改 以下想法可行吗 获取密钥字符串作为加密值,并在Base64中对其进行编码 (出于我的目的,我的加密字符串大约为100个字符) 计算校验和(MD5),当然要使用专用的salt 将校验和编织到加密数据中 原则上: xxxxCxxxxxxCxxxxxxxxCxxxxxxxxxxCxxxxxxxxxxxxxCxxx 可以通过加密数据的第一个cher来确定编织到加密数据中的位置,从而创建多达16种不同的
- 获取密钥字符串作为加密值,并在Base64中对其进行编码 (出于我的目的,我的加密字符串大约为100个字符)
- 计算校验和(MD5),当然要使用专用的salt
- 将校验和编织到加密数据中
xxxxCxxxxxxCxxxxxxxxCxxxxxxxxxxCxxxxxxxxxxxxxCxxx
- 可以通过加密数据的第一个cher来确定编织到加密数据中的位置,从而创建多达16种不同的模式
我的想法正确吗 您正在考虑的加密功能称为“身份验证”,有许多成熟的方法。您应该极力避免自己发明,特别是使用像MD5这样的过时的散列。当加密系统通过身份验证时,它可以检测密文的更改 最好的方法是使用经过身份验证的密码模式,如AES-GCM。正确使用,将加密和身份验证结合在一个操作中。在解密经过身份验证的方案时,如果修改了密码文本,则解密将失败 如果您没有访问AES-GCM的权限,下一个选项是AES-CBC+HMAC,它使用更普遍的AES-CBC和随机IV,并在消息末尾附加一种加密哈希(称为HMAC)以对其进行身份验证。为了进行身份验证,您需要删除HMAC,使用它验证密码文本是否未修改,然后继续正常解密。此方案通常称为“加密然后MAC”
实现细节将取决于您的语言和框架。您真正想要实现的是DRM,使用一些特殊的模糊技术。如果有人能对你的软件进行逆向工程,那么你的技术就不是特别难克服。如果他们无法反转你的软件,那么你的技术就毫无意义地复杂了,只需对MAC使用适当的加密。Rob,这是很好的信息。当然还有一些有用的建议。是否正确理解客户端密钥将是CCCC HHHHHHH(C=crypt,H=HMAC),为了进行身份验证,我将两者分开,然后将从C计算出的H与存储的H进行比较?是的,但通常还需要在前端附加一个IV,因此它是IV+crypt+HMAC。CBC需要随机静脉注射。如需类似格式的示例(有多种语言的实现),请参阅。该格式还包括SALT,如果您使用密码而不是随机密钥进行加密,则需要SALT。鉴于您的整个数据只有大约100字节,完整的RNCryptor格式可能太重。它增加了66字节的开销。但是如果你能负担得起空间,它是一个简单易用的系统,有很多实现。不过,如果需要的话,也有办法把它缩小一点。