これは私の方法です:
import org.bouncycastle.asn1.ASN1InputStream;
import java.io.ByteArrayInputStream;
...
public static byte[] toDERBytes(byte[] data) throws IOException
{
ByteArrayInputStream inStream = new ByteArrayInputStream(data);
//Uses imported bouncy castle library:
ASN1InputStream asnInputStream = new ASN1InputStream(inStream);
byte[] derArray = asnInputStream.readObject().getEncoded();
asnInputStream.close();
return derArray;
}
BouncyCastle のドキュメントによると、ASN1InputStream.readobject() は実際には ASN1 ではなく DER オブジェクトを取得する必要があることがわかりました。(私の理解では、DER は ASN1 のサブタイプです)
次に、バイトを返します。
これは半分の時間で機能しますが、残りの半分で次のエラーが発生します。
java.io.IOException: DER length more than 4 bytes: XXX
私の質問は次のとおりです。
- エラーがたまにしか表示されないのはなぜですか? (私は常に65バイトのデータを与えます)
- どうすれば修正できますか?
- 正しい方法で DER をエンコードしていますか?