0

我有一个加密服务(.Net Class Lib)现在我必须将它移植到java,就加密和解密而言,这两个服务都可以正常工作,但问题是我必须将加密值保存在数据库中并且java 服务生成的加密值必须与 .Net 类库生成的值匹配。

现在,如果我加密一个值,则说android这两个服务都会生成不同的加密值。有什么可能的解决方法或要寻找的东西...

4

2 回答 2

2

加密系统通常具有以下参数:

  • 算法
  • 加密密钥(如果适用,还有一个初始化向量)
  • 密码块模式

可以使用任何语言和在任何平台上开发系统,并且只要这三件事相同,那么任何实现的输出都是相同的。像平台字节序这样的事情并不重要,因为算法应该使用字节作为基本单位。

因此,如果您为相同的输入获得不同的输出,那么其中一项或多项是错误的:)

如果您已经开发了自己的加密系统(例如自己实现了 3DES),那么这可能就是您的错误所在。始终将密码系统的实施留给学术专业人士

我将假设您正确设置了密钥和 IV,从而离开了密码块模式——这是最合理的解释,因为不同的平台有自己的默认值。

但是,如果您已验证所有这些内容在您的 .NET 和 Java 实现中都是相同的,那么您应该重新发布您的问题,但要提供更多详细信息,包括相关的源代码。

于 2012-12-10T08:00:58.180 回答
1

我做了同样的事情——从 Java 到 C#。查看来自开源项目的现有代码可能会有所帮助。

  • LockCrypt是我写的一个例子
  • Keepass具有所有主要语言的端口,因此您可以比较每种语言的加密方式
于 2012-12-10T08:10:10.563 回答