Я пытаюсь расшифровать байты моего закрытого ключа с помощью KeyCrypter
интерфейса. Но я не знаю, как реализовать и вызвать decrypt()
функцию. Первоначально я шифрую байты моего закрытого ключа моего файла ECKey
.
Вот мой код:
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;
}
какой байт [] result=... возвращается из моей decrypt()
функции?
Попытка реализовать интерфейс KeyCrypter
— достойное занятие, но, похоже, для этого требуется больше, чем несколько простых строк кода. bitcoinj
предлагает одну реализацию с классом KeyCrypterScrypt
, и вы можете посмотреть исходный файл для этого класса. Однако, поскольку эта реализация существует, вам не нужно предоставлять свою собственную реализацию, KeyCrypter
если все, что вы хотите сделать, это иметь возможность шифровать и расшифровывать ключи. Это можно сделать следующим образом:
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
}
}