当前位置: 首页 > 知识库问答 >
问题:

不同java服务中密封对象的加密和解密引发classNotFoundException

郎永福
2023-03-14

我正在使用AES加密下面的员工类,并将其保存为sealedObject作为serviceA的一部分。

org.company.serviceA.model.employee;
class employee{
Integer ssn;
String name;
}

org.company.serviceB.model.employee;
class employee{
Integer ssn;
String name;
}

在serviceB中,当我尝试将sealedObject解密回员工类时。

employee emp = (employee) sealedObject.getObject;

它抛出ClassNotFoundException,表示org。公司服务A。模型未找到员工。

显然,它试图通过完全限定的名称找到ServiceA的employee类,即使我在serviceB中创建了类似的类。

当加密和解密都在同一个服务中完成时,它可以正常工作。但当它们在不同的服务中完成时,decrypt抛出ClassNotFoundException。

那么有没有一种方法可以克服ClassNotFoundException并解密serviceB中的密封对象?

共有1个答案

斜宁
2023-03-14

您要么必须使用相同的类/源代码,要么必须考虑另一种编码/解码employee类的方法。Java在内部总是使用完整的类名。

如果要创建一个(无状态)库,其中包含类Person,则可以在这两个服务中导入该库。通过良好的类设计,可以避免人员类中的任何差异。

例如,您可以创建自己的序列化方法。

或者,您可以简单地加密/解密围绕个人创建的字节数组。以某种方式使用X500/LDAP元素进行编码/解码是有意义的,但这与其说是一个直接的答案,不如说是一个研究方向。

最后,我想任何以规范方式直接编码/解码为字节的东西都符合要求。

 类似资料:
  • 我想在Java文件中存储一个加密的密码。我看到了一个使用javax.crypto的解决方案,但问题是密钥是动态生成的,并且是随机的。 有没有办法告诉javax.crypto方法: 这是否可以替换为基于某个私钥生成一次的我自己的密钥? 有谁能给我指出一些如何做到这一点的资源吗?

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 问题内容: 我想用Java加密和解密密码,然后以加密形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗? 问题答案: 编辑 :这个答案是旧的。现在 不建议 使用MD5,因为它很容易被破坏。 我想象中的MD5必须足够好?您可以使用MessageDigest实现它。 这里还列出了其他算法。 如果确实需要,这是它的第三方版本: Fast MD5

  • 问题内容: 我想使用128位AES加密和16字节密钥对密码进行加密和解密。解密值时出现错误。解密时我丢失任何内容吗? 错误信息 最后我基于@QuantumMechanic答案使用以下解决方案 } 问题答案: 如果对于块密码,您将不使用包含填充方案的转换,则需要使明文中的字节数为该密码的块大小的整数倍。 因此,要么将纯文本填充到16字节的倍数(即AES块大小),要么在创建对象时指定填充方案。例如,您

  • 问题内容: 我想将加密的密码存储在Java文件中。我在使用 javax.crypto 的解决方案中看到了一个问题,但是问题在于密钥是动态生成的,并且是随机的。 然后将在运行时在Java程序中获取并解密该密码。鉴于我要在文件中存储一个已经加密的密码-解密时我想要正确的文本。 有没有办法告诉javax.crypto方法: 可以将其替换为基于某个私钥生成的我自己的密钥吗? 谁能指出一些有关执行此操作的资

  • 本文向大家介绍JAVA中AES对称加密和解密过程,包括了JAVA中AES对称加密和解密过程的使用技巧和注意事项,需要的朋友参考一下 AES对称加密和解密代码详细介绍,供大家参考,具体内容如下  测试结果: 使用AES对称加密,请输入加密的规则 使用AES对称加密 请输入要加密的内容: 使用AES对称加密 根据输入的规则使用AES对称加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58Y