Encryption 在不同编程语言之间传递加密数据的最佳实践
我已经读到,如果您想使用一种编程语言加密字符串,并使用另一种编程语言解密该字符串,那么为了确保兼容性,最好在加密之前进行一些转换。我已经读到,最好的做法是加密字符串的字节数组,而不是字符串本身。此外,我还了解到,某些加密算法期望每个加密数据包的大小是固定长度的。如果要加密的最后一个数据包不是所需的大小,则加密将失败。因此,对首先转换为固定长度(如十六进制)的数据进行加密似乎是个好主意 我试图确定无论使用何种加密算法,通常都有用的最佳实践。为了最大限度地提高跨不同语言和平台加密和解密数据时的兼容性,我想对以下步骤进行评论: 加密:Encryption 在不同编程语言之间传递加密数据的最佳实践,encryption,language-agnostic,Encryption,Language Agnostic,我已经读到,如果您想使用一种编程语言加密字符串,并使用另一种编程语言解密该字符串,那么为了确保兼容性,最好在加密之前进行一些转换。我已经读到,最好的做法是加密字符串的字节数组,而不是字符串本身。此外,我还了解到,某些加密算法期望每个加密数据包的大小是固定长度的。如果要加密的最后一个数据包不是所需的大小,则加密将失败。因此,对首先转换为固定长度(如十六进制)的数据进行加密似乎是个好主意 我试图确定无论使用何种加密算法,通常都有用的最佳实践。为了最大限度地提高跨不同语言和平台加密和解密数据时的兼容性
- 以纯文本字符串开始
- 将纯文本字符串转换为字节数组
- 将字节数组转换为十六进制
- 将十六进制加密为加密字符串
- 以加密字符串结尾
- 从加密字符串开始
- 将加密字符串解密为十六进制
- 将十六进制转换为字节数组
- 将字节数组转换为纯文本字符串
- 以纯文本字符串结尾
- 纯文本字符串
- 将纯文本字符串转换为字节数组
- 将字节数组转换为十六进制
- 将十六进制加密为加密字符串
- 加密字符串
- 纯文本字节数组到加密字节数组
- 加密字符串
- 将加密字符串解密为十六进制
- 将十六进制转换为字节数组
- 加密字节数组
- 将加密字节数组解密为纯文本字节数组
- 将字节数组转换为纯文本字符串
- 纯文本字符串
要解密,请将加密的字节数组解密为纯文本字节数组。从这个字节数组构造字符串。完成。您的前提是正确的,但在某些方面比这要简单一些。现代密码算法意味着与语言无关,如果你有相同的输入和相同的密钥,你应该得到相同的结果 的确,对于大多数密码和密码,数据需要是固定长度的。转换为十六进制无法完成,因为数据需要在固定边界上结束。以AES为例,如果要加密4个字节,则需要将其填充到16个字节,这是十六进制表示法无法做到的。幸运的是,这很可能发生在您最终使用的加密API中,其中一个是标准API。因为您没有标记语言,所以.NET中的AES托管类支持的填充模式的类型 另一方面,正确加密数据需要的不仅仅是字节编码。您需要选择正确的操作模式(CBC或CTR是首选),然后提供某种类型的操作。加密本身不能防止数据被篡改。如果你想把事情简化一点,那么看看类似的模式,它处理机密性和完整性 然后,您的方案应该类似于:
- 将纯文本转换为字符串到字节数组。有关字符编码的重要说明,请参见@rossum的评论李>
- 生成随机对称密钥或用于将密码短语转换为密钥
- 生成用于GCM的随机IV/nonce
- 加密字节数组并将其与身份验证标记一起存储
- 您可以选择将字节数组存储为李>