我正在尝试PGWRecord CDR
使用符号进行编码,从这个 3GPP TS 文档ASN.1
的第 89 页开始
我一直在寻找如何做到这一点的例子,但无济于事。有没有可以向我展示如何使用的示例Bouncy Castle
?或者有比Bouncy Castle
编码这个 CDR 更好的选择吗?
关于如何做到这一点的分步说明会非常好!
任何帮助将不胜感激。谢谢大家!
我正在尝试PGWRecord CDR
使用符号进行编码,从这个 3GPP TS 文档ASN.1
的第 89 页开始
我一直在寻找如何做到这一点的例子,但无济于事。有没有可以向我展示如何使用的示例Bouncy Castle
?或者有比Bouncy Castle
编码这个 CDR 更好的选择吗?
关于如何做到这一点的分步说明会非常好!
任何帮助将不胜感激。谢谢大家!
是的,就在两个月前,我在 Bouncy Castle 上工作,以解码 CDRS 中的 3GPP 搁浅编码文件。目前我擅长解码,如果解码有任何问题,我可以举更多例子,我可以轻松解决。
但是对于您的问题,我可以提出一些建议,如果您有任何问题,请添加评论。它不仅对您有帮助,还可以帮助从编码/解码过程开始的新蜜蜂。
a) 您为编码 CDRS 文件选择了正确的 API (Bouncy Castle)
b) 您可以购买付费版本的编码/解码 API,但它过于广泛
c) 我发现了 3 个付费 API,它们提供了良好且预期的结果,它们是
1) [OSS Nokalva][1]
2) Obj-Sys
3) unigone
d) 对我来说,Bouncy castle 提供了 100% 的结果,然后付费 API,即使它们运行良好且良好。如果你想使用 Bouncy castle 那么你需要在编码上付出更多的努力,所以 Bouncy castle 是一个支持基本和一些高级解析器的 API,要进行任何编码/解码,你需要根据你的编写 java 类ASN.1 语法规范等等.. 我可以编写这些步骤,但它会太长所以这个答案的结尾我给你一个链接,它可以更好地解释它。单击此链接并下载bcprov-jdk15on-154.tar.gz
文件。
e) 解压你下载的包,去bcprov-jdk15on-154\bcprov-jdk15on-154\src\org\bouncycastle\asn1\test
你会发现N个例子,根据ASN.1语法规范对CDR进行编码/解码
f)如果你想用非常简单的例子来理解,那么通过这个链接你可以轻松地完成你的工作
不过,如果您觉得难以理解,请写评论,我会尽力帮助您。
尝试查看BinaryNotes。您对要编码的内容有 ASN.1 定义。BinaryNotes 将生成用于向/从 ASN.1 编码/解码对象的类。
BinaryNotes 使用 xlst 转换来生成类。您可以修改转换,使其使用弹性类形成编码/解码。
我猜 CHOICE 的编码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