与外部系统对接时,遇到一个问题记录一下。
对接系统使用的都是国际标准的RSA加密方式,实现语言是java。我们这边开发系统的时候使用python。在RSA解密的时候解析不出正确的源文。
怀疑原因:由于java默认提供的序列化机制——实现java.io.Serializable接口并生成序列化ID,这样子就可以通过java.io.ObjectInput和java.io.ObjectOutput实现序列化和反序列化。java序列化技术是java语言内部的私有协议,其他语言并不支持。所以java序列化后的字节数组,其他语言没有办法进行反序列化,双方无法互通。
解决办法:
- 验签的服务用JAVA编写,后续的业务服务用python编写。
- 双方同时改动,用通用的序列化框架做序列化,如xml、json、Hessian等。