encryption - 在不同编程语言之间传递加密数据的最佳实践

标签 encryption language-agnostic

我读到过,如果您想使用一种编程语言加密字符串并使用另一种编程语言解密该字符串,那么为了确保兼容性,最好在进行加密之前进行一些转换。我读过,最好的做法是加密字符串的字节数组而不是字符串本身。另外,我读到某些加密算法期望每个加密数据包的大小都是固定长度的。如果要加密的最后一个数据包不是所需的大小,则加密将失败。因此,加密首先转换为固定长度(例如十六进制)的数据似乎是个好主意。

无论使用何种加密算法,我都在尝试确定通常有用的最佳实践。为了在不同语言和平台上加密和解密数据时最大限度地提高兼容性,我想对以下步骤作为一个过程进行批评:

加密:

  • 以纯文本字符串开头
  • 将纯文本字符串转换为字节数组
  • 将字节数组转换为十六进制
  • 将十六进制加密为加密字符串
  • 以加密字符串结尾

解密:

  • 以加密字符串开头
  • 解密加密字符串为十六进制
  • 将十六进制转换为字节数组
  • 将字节数组转换为纯文本字符串
  • 以纯文本字符串结尾

最佳答案

实际上,加密的最佳实践是使用高级加密框架,使用基元可能会做很多错误的事情。如果您不使用高级加密框架,mfanto 会很好地提及您需要了解的重要事项。我猜想,如果您试图最大限度地提高编程语言之间的兼容性,那是因为您需要其他开发人员与加密进行互操作,然后他们也需要学习使用加密的底层细节。

所以我对高级框架的建议是使用 Google Keyczar框架,因为它为您处理算法、 key 管理、填充、iv、身份验证标签、有线格式的细节。它存在于许多不同的编程中Java, Python, C++ , C#Go .检查一下。

我编写了 C# 版本,所以我可以告诉你它在幕后使用的原语在大多数其他编程语言中也广泛可用,并且它使用 json 等标准进行 key 管理和存储。

关于encryption - 在不同编程语言之间传递加密数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246307/

相关文章:

performance - 洗牌时跟踪项目的最佳方式,以及洗牌前它们所在的位置

algorithm - 如何修改id混淆混洗位算法中的掩码?

python - 进行大多数模拟验证的单元测试是否有异味?

algorithm - 如果字符串集中有多个可识别的数字序列,自然排序应该如何工作?

c# - 同时使用 catch 和 finally 的 try-catch-finally 的用例

language-agnostic - 消除编译器警告是个好主意吗?

c - 文件解密时出现 "EVP_DecryptFInal_ex: bad decrypt"如何解析

CryptoJS 中的 Crypto 解密中的 Javascript 加密

c# - Xamarin.android-如何更快地加密/解密图像

php - 关闭 cURL 中的 CURLOPT_SSL_VERIFYPEER 是否会使传输不安全?