【发布时间】:2018-12-21 13:30:21
【问题描述】:
我正在使用 Spongy Castle 库将我的用户私钥 (PKCS8) 编码为 ASN1 实体,然后将 Base64 编码字符串编码为二维码。
我的一位同事发现可以在不损坏私钥的情况下更改 Base64 字符串中的某些字符。 ASN1 格式或 PKCS8/DER 格式是否实现了一些容错功能?
//final String encoded = "MIGcAgEBB........lGEOPD2o+H59Qyl"; // original
final String encoded = "MIGcAgEBB........lGEOPD2oXXXXXXX"; // changed!
// decode Base64
final byte[] buffer = Base64.decode(encoded);
// decode ASN1
final ASN1Primitive primitive = ASN1Primitive.fromByteArray(buffer);
final ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(primitive);
// read from ASN1
final BigInteger version = ASN1Integer.getInstance(asn1Sequence.getObjectAt(0)).getValue();
final byte[] keyBytes = DEROctetString.getInstance(asn1Sequence.getObjectAt(1)).getOctets();
// get private key from bytes
final PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(keyBytes);
final PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
【问题讨论】:
标签: android bouncycastle asn.1 spongycastle