2010-06-27 14 views
1

bouncycastle我可以創建一個從KeyUsage開始的DEROctetString。從DEROctetString到KeyUsage

如何從DEROctetString開始獲得KeyUsage呢?

例子:

DEROctetString derString = new DEROctetString(new KeyUsage(KeyUsage.digitalSignature)); 
KeyUsage ku = ...(some code to get back KeyUsage starting from derString)... 

我需要這個,因爲我能夠創建密鑰使用延期請求證書請求,但隨後,由於單獨的證書請求,我不能取回密鑰使用擴展。

回答

1

我已經找到了解決方案使用ASN1InputStream:

ASN1InputStream ais = new ASN1InputStream(derOctetString.getOctetStream()); 
KeyUsage ku = new KeyUsage((DERBitString) ais.readObject()); 

這一工程!

+0

我想你的意思是「編譯!」。將位串編碼爲八位字符串不起作用。只要你有多個用法,你會看到問題。 – 2010-06-28 11:05:48

+0

不,它確實編譯,它也可以工作(我的意思是我找回了正確的KeyUsage.intValue())。 – 2010-06-28 12:05:51

0

密鑰使用在X.509定義爲這,

id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } 

KeyUsage ::= BIT STRING { 
     digitalSignature  (0), 
     nonRepudiation   (1), 
     keyEncipherment   (2), 
     dataEncipherment  (3), 
     keyAgreement   (4), 
     keyCertSign    (5), 
     cRLSign     (6), 
     encipherOnly   (7), 
     decipherOnly   (8) } 

所以這是錯誤的創建八位位組串吧。如果你創建DERBitString,KeyUsage有一個構造函數。

+0

我明白你的觀點,但我必須創建一個OctetString,因爲我需要將它傳遞給X509Extension構造函數的第二個參數,然後我需要從中獲取KeyUsage。無論如何,我找到了解決辦法,檢查我的答案;) – 2010-06-28 08:55:25