1

我正在尝试PGWRecord CDR使用符号进行编码,从这个 3GPP TS 文档ASN.1的第 89 页开始

我一直在寻找如何做到这一点的例子,但无济于事。有没有可以向我展示如何使用的示例Bouncy Castle?或者有比Bouncy Castle编码这个 CDR 更好的选择吗?

关于如何做到这一点的分步说明会非常好!

任何帮助将不胜感激。谢谢大家!

4

3 回答 3

3

是的,就在两个月前,我在 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)如果你想用非常简单的例子来理解,那么通过这个链接你可以轻松地完成你的工作

不过,如果您觉得难以理解,请写评论,我会尽力帮助您。

于 2016-04-08T09:59:04.223 回答
1

尝试查看BinaryNotes。您对要编码的内容有 ASN.1 定义。BinaryNotes 将生成用于向/从 ASN.1 编码/解码对象的类。

BinaryNotes 使用 xlst 转换来生成类。您可以修改转换,使其使用弹性类形成编码/解码。

于 2016-03-10T21:28:13.553 回答
1

我猜 CHOICE 的编码GPRSRecord类似于下面的内容。注意标记值以及从字符串视图转换为十六进制和 BCD 包装的IMSIGSNAddress

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
于 2019-01-11T21:40:25.747 回答