我正在尝试使用PGWRecord CDR
符号对ASN.1
进行编码,从this 3GPP TS Document
我一直在寻找一些例子如何做到这一点,但无济于事。是否有任何示例可以告诉我如何使用Bouncy Castle
执行此操作?或者是否有比Bouncy Castle
更好的替代方案来编码此CDR?
有关如何做到这一点的分步说明非常好!
非常感谢任何帮助。谢谢大家!
答案 0 :(得分:0)
尝试查看BinaryNotes。您有ASN.1定义您要编码的内容。 BinaryNotes将生成用于向/从ASN.1编码/解码对象的类。
BinaryNotes与xlst转换一起生成类。你可以用一种方式修改转换,它将使用形式编码/解码的弹性类。
答案 1 :(得分:0)
雅,仅仅两个月前我就在Bouncy城堡工作,解码CDRS中的哪一个被困的编码文件。目前我很擅长解码,如果有任何解码问题我可以提供更多的例子,我可以轻松解决它。
但是对于你的问题我可以提出一些观点,如果你有任何问题请求添加评论。它不仅对您有所帮助,它还可以帮助那些从编码/解码过程开始的新蜜蜂。
a)您为编码CDRS文件做了正确的API选择(Bouncy Castle)
b)您可以使用付费版本的编码/解码API,但它太过膨胀
c)我找到了3个付费API,它们给出了良好和预期的结果,这些是
1) [OSS Nokalva][1]
2) Obj-Sys
3) unigone
d)对我来说,Bouncy城堡给出了100%的结果然后支付了API,即使它们运作良好且良好。如果你想使用Bouncy castle,那么你需要付出更多的努力去编码,所以Bouncy castle是一个支持基本和一些高级解析器的API,你可以根据你的需要编写java类来编写/解码ASN.1语法规范等等。我可以编写步骤,但它会太长,所以这个答案的结尾我给你一个更好地解释它的链接。点击this link并下载bcprov-jdk15on-154.tar.gz
文件。
e)解压缩您下载的软件包并转到bcprov-jdk15on-154\bcprov-jdk15on-154\src\org\bouncycastle\asn1\test
您将找到N个根据ASN.1语法规范对CDR进行编码/解码的示例
f)如果您想通过非常简单的示例来理解,那么请通过this link轻松完成您的工作
如果您发现难以理解然后写评论我将尽力帮助我。
答案 2 :(得分:0)
我想GPRSRecord
CHOICE的编码将类似于以下内容。请小心标记值,并从字符串视图转换为十六进制和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