Ich versuche, meine privaten Schlüsselbytes über die KeyCrypter
Schnittstelle 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?
Der Versuch, die Schnittstelle zu implementieren, KeyCrypter
ist eine lohnende Übung, aber es scheint mehr als ein paar einfache Codezeilen zu erfordern. bitcoinj
bietet eine Implementierung mit der Klasse an, KeyCrypterScrypt
und Sie können sich die Quelldatei für diese Klasse ansehen. Da diese Implementierung jedoch vorhanden ist, müssen Sie keine eigene Implementierung bereitstellen, KeyCrypter
wenn 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
}
}