Расшифровать мой закрытый ключ с помощью KeyCrypter

Я пытаюсь расшифровать байты моего закрытого ключа с помощью 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()функции?

Ответы (1)

Попытка реализовать интерфейс 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
  }
}