2012-02-27 70 views
2

我不知道我是否遺漏了這個例子中的一段代碼。我在certHeader上發現了編譯時錯誤,這個類中的certFooter.IF有人可以給我一個簡單的想法, .or如果有人對證書解析器有更好的示例,那將會有所幫助。 我正在使用此示例來解析證書。證書解析器在android

try 
{ 
    String abc = "-----BEGIN CERTIFICATE-----\n" + "ALneIwerZ5Nu+z1Yjvdco9sOHfkhYW4nL+FIlGDGIS +YsyevB8YN2hBnog7gtQ6PB+sVF6o/1UdU\n" + // lines deleted for brevity "rchFUEChHZ5G7AAk02K7/iyqITc/IPNHHpilTg/NB6QhF9s=\n" + "-----END CERTIFICATE-----"; 

int headerIndex = abc.indexOf(certHeader); 
    if (headerIndex == -1) 
    { 
     throw new CertificateParsingException("cannot find BEGIN CERTIFICATE"); 
     } 
    int startIndex = headerIndex + certHeader.length(); 

int endIndex = abc.indexOf(certFooter); 
if (endIndex == -1) 
{ 
    throw new CertificateParsingException("cannot find END CERTIFICATE"); } 

String cert = abc.substring(startIndex, endIndex); 
byte[] certBytes = cert.getBytes(); 

InputStream in = new Base64InputStream(new ByteArrayInputStream(certBytes)); 

CertificateFactory certFact = CertificateFactory.getInstance ("X.509"); 
Certificate certGen = certFact.generateCertificate(in); 
X509Certificate x509 = (X509Certificate) 
certGen; 
} 
catch (Exception e) 
{ 
    Log.e("testapp", "exception: " + e.getMessage()); 
    } 

回答

0

certHeadercertFooter都應該是int變量。從您向我們展示的內容看來,它看起來並不像您在任何地方宣佈過的那樣。

String.indexOf文檔:

返回此字符串的 指定字符的第一次出現的中的索引。如果在此String對象表示的 字符序列中出現值爲ch的字符,則會返回第一個此類事件的索引 (以Unicode代碼單位表示)。對於從0到0xFFFF(含)的範圍內ch的 值,這是 最小k值,使得:

this.charAt(k) == ch 
+0

Thanku Marvin.Again我正在上certHeader.length一些編譯時間錯誤( ); (不能調用基本類型int的length())。如果你已經實現了證書解析器,然後你可以給我鏈接。因爲我想我在這個程序中會有一些其他的錯誤。 – John 2012-02-27 19:13:48

+0

@saurabhverma我不明白你想用'certHeader.length()'達到什麼目的。假設你已經將'certHeader'聲明爲你正在查找的_char_的int值,並且你在'headerIndex'中有該char的索引,你需要什麼'certHeader.length'作爲? – 2012-02-27 19:24:59

+0

馬文甚至我從http://markmail.org/message/ppykrk2mhq5pediq複製了這段代碼。即使我想了解這段代碼如何返回我的證書詳細信息。 – John 2012-02-27 19:30:23