2010-11-22 5 views

Antwort

19

Ich bin sicher, es gibt Beispiele da draußen, aber ich habe sie nicht gefunden. Hier sind ein paar Tipps, die Ihnen den Einstieg erleichtern. Sie müssen lernen, wie Sie die BC-Klassen miteinander verbinden. Als Erstes sollten Sie sich den Quellcode der Bouncycastle beschaffen und darauf vorbereitet sein, ihn zu betrachten, wenn Sie Fragen haben. Es ist wirklich sehr lesbar, also haben Sie keine Angst, es zu untersuchen, wenn die documentation schlecht ist. Zum Beispiel möchten viele Klassen eine Instanz eines CipherParameters Objekts, aber es ist selten, dass die Dokumentation weitere Details angibt. Im Quellcode wird jedoch offensichtlich sein, welche implementierenden Klassen erwartet werden.

Wählen Sie eine der AES-Engines, z. B. AESEngine, als Verschlüsselungsmodul. Als nächstes wähle einen Modus; ECB ist selten korrekt. Wenn Sie zum Beispiel den CBC-Modus auswählen, erstellen Sie ein Objekt CBCBlockCipher von Ihrem Objekt AESEngine. Verwenden Sie als Nächstes dieses Objekt, um ein Objekt PaddedBufferBlockCipher zu erstellen. Der Standardkonstruktor verwendet PKCS7-Padding, das mit dem gewünschten PKCS5-Padding identisch ist. Jetzt müssen Sie ein Objekt erstellen, das den Schlüssel und die IV enthält. Dies ist die CipherParameters Schnittstelle. Sie erstellen das Objekt in zwei Schritten. Zuerst erstellen Sie mit Ihrem Schlüssel ein KeyParameter Objekt. Als nächstes erstellen Sie ein ParametersWithIV Objekt mit Ihrem KeyParameter Objekt und Ihrem IV. Dieses Objekt wird an die init-Methode des Objekts PaddedBufferBlockCipher übergeben und Sie können jetzt loslegen.

EDIT

Hier ist kleines Beispiel:

private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data) 
     throws Exception 
{ 
    int minSize = cipher.getOutputSize(data.length); 
    byte[] outBuf = new byte[minSize]; 
    int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0); 
    int length2 = cipher.doFinal(outBuf, length1); 
    int actualLength = length1 + length2; 
    byte[] result = new byte[actualLength]; 
    System.arraycopy(outBuf, 0, result, 0, result.length); 
    return result; 
} 

private static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception 
{ 
    PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
      new AESEngine())); 
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv); 
    aes.init(false, ivAndKey); 
    return cipherData(aes, cipher); 
} 

private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception 
{ 
    PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
      new AESEngine())); 
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv); 
    aes.init(true, ivAndKey); 
    return cipherData(aes, plain); 
} 
+0

hey Dank für Ihre Hilfe, können Sie mir bieten einige Beispiel-Code für gleiche ?? – Mihir

+0

Wie IV in J2me generieren und was ist die Bedeutung von IV? – Mihir

+0

Tut mir leid, ich werde Ihnen kein Verschlüsselungs-Tutorial anbieten. –

Verwandte Themen