Entschlüsseln Sie meinen privaten Schlüssel mit KeyCrypter

Ich versuche, meine privaten Schlüsselbytes über die KeyCrypterSchnittstelle zu entschlüsseln. Aber ich weiß nicht, wie ich die decrypt()Funktion implementieren und aufrufen soll. Zunächst verschlüssele ich die Bytes meines privaten Schlüssels meiner ECKey.

Hier ist mein Code:

private ECKey myKey;
private CharSequence password = "myPassword";


public KeyParameter deriveKey(CharSequence password)
            throws KeyCrypterException {

        String s = password.toString();
        KeyParameter keyParameter = new KeyParameter(s.getBytes());

        return keyParameter;
    }

    public EncryptedData encrypt(byte[] plainBytes,
            org.spongycastle.crypto.params.KeyParameter aesKey)
            throws KeyCrypterException {

        plainBytes = myKey.getPrivKeyBytes();

        EncryptedData myData = new EncryptedData(plainBytes, aesKey.getKey());
        System.out.println(myData);

        return myData;
    }

    public byte[] decrypt(EncryptedData encryptedBytesToDecode,
            KeyParameter aesKey) throws KeyCrypterException {
        // TODO Auto-generated method stub

        return null;
    }

Welches ist das Byte [] result=..., das von meiner decrypt()Funktion zurückkehrt?

Antworten (1)

Der Versuch, die Schnittstelle zu implementieren, KeyCrypterist eine lohnende Übung, aber es scheint mehr als ein paar einfache Codezeilen zu erfordern. bitcoinjbietet eine Implementierung mit der Klasse an, KeyCrypterScryptund Sie können sich die Quelldatei für diese Klasse ansehen. Da diese Implementierung jedoch vorhanden ist, müssen Sie keine eigene Implementierung bereitstellen, KeyCrypterwenn Sie lediglich die Möglichkeit haben möchten, Schlüssel zu verschlüsseln und zu entschlüsseln. Dies kann wie folgt erfolgen:

import org.bitcoinj.core.ECKey;
import org.bitcoinj.crypto.KeyCrypter;
import org.bitcoinj.crypto.KeyCrypterScrypt;
import org.spongycastle.crypto.params.KeyParameter;

public class Test {

  public static void main(String[] args){

  ECKey k1 = new ECKey(); // some random key

  // encrypting a key
  KeyCrypter crypter1 = new KeyCrypterScrypt();
  KeyParameter aesKey1 = crypter1.deriveKey("some arbitrary passphrase");
  ECKey k2 = k1.encrypt(crypter1, aesKey1);
  System.out.println(k2.isEncrypted()); // true

  // decrypting a key
  KeyCrypter crypter2 = k2.getKeyCrypter();
  KeyParameter aesKey2 = crypter2.deriveKey("some arbitrary passphrase");
  ECKey k3 = k2.decrypt(aesKey2);
  System.out.println(k1.equals(k3));  // true
  }
}