我读到过,如果您想使用一种编程语言加密字符串并使用另一种编程语言解密该字符串,那么为了确保兼容性,最好在进行加密之前进行一些转换。我读过,最好的做法是加密字符串的字节数组而不是字符串本身。另外,我读到某些加密算法期望每个加密数据包的大小都是固定长度的。如果要加密的最后一个数据包不是所需的大小,则加密将失败。因此,加密首先转换为固定长度(例如十六进制)的数据似乎是个好主意。
无论使用何种加密算法,我都在尝试确定通常有用的最佳实践。为了在不同语言和平台上加密和解密数据时最大限度地提高兼容性,我想对以下步骤作为一个过程进行批评:
加密:
- 以纯文本字符串开头
- 将纯文本字符串转换为字节数组
- 将字节数组转换为十六进制
- 将十六进制加密为加密字符串
- 以加密字符串结尾
解密:
- 以加密字符串开头
- 解密加密字符串为十六进制
- 将十六进制转换为字节数组
- 将字节数组转换为纯文本字符串
- 以纯文本字符串结尾
最佳答案
实际上,加密的最佳实践是使用高级加密框架,使用基元可能会做很多错误的事情。如果您不使用高级加密框架,mfanto 会很好地提及您需要了解的重要事项。我猜想,如果您试图最大限度地提高编程语言之间的兼容性,那是因为您需要其他开发人员与加密进行互操作,然后他们也需要学习使用加密的底层细节。
所以我对高级框架的建议是使用 Google Keyczar框架,因为它为您处理算法、 key 管理、填充、iv、身份验证标签、有线格式的细节。它存在于许多不同的编程中Java, Python, C++ , C#和 Go .检查一下。
我编写了 C# 版本,所以我可以告诉你它在幕后使用的原语在大多数其他编程语言中也广泛可用,并且它使用 json 等标准进行 key 管理和存储。
关于encryption - 在不同编程语言之间传递加密数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246307/