天天看點

區塊鍊開發之BTC消息簽名和消息驗證對消息進行簽名驗證簽名消息

BTC的消息簽名機制,是使用私鑰對一段資訊簽名,然後使用公鑰對此簽名做校驗,次機制可以作為驗證消息真僞的手段,這裡使用bitcoinj庫實作的

implementation ‘org.bitcoinj:bitcoinj-core:0.14.7’

對消息進行簽名

/**
     * @param msg 要簽名的資訊
     * @param privateKey 私鑰
     * @return
     */
    public static String signMsg(@NonNull String msg, @NonNull String privateKey) {
        NetworkParameters networkParameters = null;
        if (!BTC_TEST_NET)
            networkParameters = MainNetParams.get();
        else
            networkParameters = TestNet3Params.get();
        DumpedPrivateKey priKey = DumpedPrivateKey.fromBase58(networkParameters, privateKey);
        ECKey ecKey = priKey.getKey();
        return ecKey.signMessage(msg);
    }
           

驗證簽名消息

/**
     * @param msg 明文
     * @param signatureMsg 簽名好的資訊
     * @param pubkey 公鑰
     * @return
     */
    public static boolean verifyMessage(@NonNull String msg, @NonNull String signatureMsg, @NonNull String pubkey) {
        boolean result = false;
        ECKey ecKey = ECKey.fromPublicOnly(Utils.HEX.decode(pubkey));
        try {
            ecKey.verifyMessage(msg, signatureMsg);
            result = true;
        } catch (SignatureException e) {
            result = false;
            e.printStackTrace();
        } finally {
            return result;
        }

    }
           

繼續閱讀