我正在尝试使用ASN.1
表示法对PGWRecord CDR
进行编码,从本 3GPP TS 文档的第 89 页开始
我一直在寻找如何做到这一点的例子,但无济于事。是否有任何示例可以向我展示如何使用Bouncy Castle
执行此操作?或者有没有比Bouncy Castle
更好的替代方法来编码此 CDR?
关于我如何做到这一点的分步说明会非常好!
任何帮助将不胜感激。谢谢大家!
是的,就在两个月前,我在充气城堡上工作,解码 CDRS 哪个 3GPP 搁浅编码文件。目前我擅长解码,如果解码有任何问题,我可以举更多的例子,我可以轻松解决它。
但是对于您的问题,我可以提出一些观点,如果您有任何问题,请添加评论。它不仅对您有帮助,还可以帮助从编码/解码过程开始的新蜜蜂。
a) 您为编码 CDRS 文件做了正确的 API 选择(充气城堡)
b)您可以选择付费版本的编码/解码API,但它太广泛了
c) 我找到了 3 个付费 API,它们提供了良好和预期的结果,它们是
1) [OSS Nokalva][1]
2) Obj-Sys
3) unigone
d) 对我来说,充气城堡给出了 100% 的结果,然后是付费的 API,即使它们运行良好。如果你想使用Bouncy castle,那么你需要付出更多的努力来编码,所以Bouncy castle是一个支持基本和一些高级解析器的API,要进行任何编码/解码,你需要根据ASN.1语法规范编写java类等等。我可以写这些步骤,但它会太长,所以这个答案结束了,我给你一个链接,可以更好地解释它。单击此链接并下载bcprov-jdk15on-154.tar.gz
文件。
e) 解压缩您下载的软件包并转到bcprov-jdk15on-154bcprov-jdk15on-154srcorgbouncycastleasn1test
您将找到 N 个示例来根据 ASN.1 语法规范对 CDR 进行编码/解码
f)如果您想通过非常简单的示例来了解,请通过此链接轻松完成工作
不过,如果您觉得难以理解,请写评论,我会尽力帮助。
尝试查看 BinaryNotes。您有尝试编码内容的 ASN.1 定义。BinaryNotes 将生成用于将对象编码/解码到 ASN.1 的类。
BinaryNotes 使用 xlst 转换来生成类。您可以修改转换,使其使用来自编码/解码的弹性类。
我想GPRSRecord
选择的编码将是如下所示的。小心标记值以及从字符串视图到十六进制和 BCD 打包的转换,以获得IMSI
和GSNAddress
值:
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new BERTaggedObject(true, 0, new ASN1Integer(18))); //e.g. sgsnPDPRecord (18)
v.add(new BERTaggedObject(true, 3, new BEROctetString(Hex.decode("490154203237518")); //IMSI. String to BCD bytes conversion needed
v.add(new BERTaggedObject(true, 4, new BERTaggedObject(true, 0, new DEROctetString(Hex.decode("994507776655"))))); // GSNAddress
v.add(new BERTaggedObject(true, 5, new BEROctetString(Hex.decode("00DB")))); //ChargingID
byte[] encoded = BERTaggedObject.getInstance(new BERTaggedObject(true, 78, new BERSet(v))).getEncoded(); //SGWRecord