當前位置:首頁 » 比特幣問答 » 比特幣私鑰privkey

比特幣私鑰privkey

發布時間: 2021-07-25 00:09:20

『壹』 私鑰字元串如何轉成PrivateKey對象

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;

import com.icardpay.tds.stp.fastpay.common.Convertor;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import tangdi.engine.context.Log;

/**
* RSAHelper - 對RSA 簽名&驗簽/分段加密&分段解密 的包裝 簽名演算法: "SHA1withRSA", 私鑰進行簽名; 公鑰進行驗簽.
* 加密演算法: "RSA/ECB/PKCS1Padding", 公鑰進行加密; 私鑰進行解密.
*
* [localPrivKey]是自己的私鑰, 自己的公鑰給通信對方. [peerPubKey]是對方的公鑰, 對方的私鑰在對方那邊. 為了方便,
* 這里假定雙方的密鑰長度一致, 簽名和加密的規則也一致.
*
* 以`Base64Str`結尾的參數表示內容是Base64編碼的字元串, 其他情況都是raw字元串.
*/

public class RSAHelper {

private static RSAHelper instance = null;

public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "SHA1withRSA";
public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding"; // 加密block需要預留11位元組
public static final int KEYBIT = 2048;
public static final int RESERVEBYTES = 11;

private static PrivateKey localPrivKey;
private static PublicKey peerPubKey;

private RSAHelper() {
}

public static RSAHelper getInstance(){
if(instance == null){
//雙重檢查加鎖,只有在第一次實例化時,才啟用同步機制,提高了性能。
synchronized(RSAHelper.class){
if(instance == null){
String localPrivKeyBase64Str = CmbcProps.getInstance().getConfigItem("OTHERLOCALPRIVKEY", "");
String peerPubKeyBase64Str = CmbcProps.getInstance().getConfigItem("OTHERPEERPUBKEY", "");

try {
/**
* 初始化自己的私鑰,對方的公鑰以及密鑰長度.
* localPrivKeyBase64Str
* Base64編碼的私鑰,PKCS#8編碼. (去掉pem文件中的頭尾標識)
* peerPubKeyBase64Str
* Base64編碼的公鑰. (去掉pem文件中的頭尾標識)
*/
BASE64Decoder base64Decoder = new BASE64Decoder();

byte[] buffer1 = base64Decoder.decodeBuffer(localPrivKeyBase64Str);
PKCS8EncodedKeySpec keySpec1 = new PKCS8EncodedKeySpec(buffer1);
KeyFactory keyFactory1 = KeyFactory.getInstance(KEY_ALGORITHM);
localPrivKey = keyFactory1.generatePrivate(keySpec1);

byte[] buffer2 = base64Decoder.decodeBuffer(peerPubKeyBase64Str);
KeyFactory keyFactory2 = KeyFactory.getInstance(KEY_ALGORITHM);
X509EncodedKeySpec keySpec2 = new X509EncodedKeySpec(buffer2);
peerPubKey = keyFactory2.generatePublic(keySpec2);

/**
* 實例化對象
*/
instance = new RSAHelper();
} catch (NoSuchAlgorithmException e) {
Log.info("無此演算法");
} catch (InvalidKeySpecException e) {
Log.info("公鑰非法");
} catch (IOException e) {
Log.info("公鑰數據內容讀取錯誤");
} catch (NullPointerException e) {
Log.info("公鑰數據為空");
} catch (Exception e) {
Log.error(e, "初始化密鑰失敗");
}
}
}
}

『貳』 Privatekey私鑰是什麼

比特幣的語境中,是指與一個地址(這個地址是與這個私鑰相對應的公鑰的哈希值)相關聯的一把密鑰。它存放在後台,使得你可以發送之前被發送到這個地址的比特幣出去。需要留意的是,因為比特幣使用的加密演算法是ECDSA橢圓曲線數字簽名演算法,公鑰和地址都可以從私鑰推出

『叄』 importprivkey 私鑰 為什麼是null

不知明鏡里,何處得秋霜.

『肆』 如何從不同的客戶端轉移比特幣錢包

從http://www.taobtc.net/下載bitcoin-qt客戶端的錢包文件是wallet.dat,Multibit客戶端的錢包文件是multibit.wallet,這兩個文件的文件名、大小和格式均不相同,那麼如何切換呢?如果不需要保存原來的地址的話,直接把幣發送到Multibit的地址中是最方便的辦法了。如果需要保留原來的地址,可以通過導出-導入私鑰的方法,具體如下:1. 打開bitcoin-QT客戶端,找到自己存錢的地址(你可能有多個地址,找到存有幣的那個),右鍵-復制;2. 依次打開 幫助 - 調試窗口 - 控制台,輸入命令 mpprivkey (空格) ,粘貼剛才復制的地址,回車;3. 現在你應該能看到你得私鑰了,它是一串52位的字元,復制下來;4. 打開Multibit,假設你這裡面沒錢,選擇工具 - 導出私鑰,選擇路徑,選擇不需要加密,點導出私鑰;5. 用記事本打開剛才導出的.key文件,這裡面存了你剛才導出的私鑰(以#開頭的行是注釋),把這個私鑰換成你剛才復制的那個,後面的時間可以不動,保存後退出;6. 點 工具 - 導入私鑰,選擇剛才修改的.key文件,導入;7. 短暫的更新以後你應該就能看到導入的原來的地址,還有原來地址中你的余額。提醒:1. 務必不要泄露你的私鑰,知道了私鑰就可以支配對應地址里的比特幣!2. 其他客戶端,如electrum, Armory都可以用類似的方法導入和導出,但是私鑰的格式有51位的和52位的,可能不全通用。

『伍』 比特幣錢包轉移怎麼操作轉移到哪裡更安全

1.
打開bitcoin-QT客戶端,找到自己存錢的地址(你可能有多個地址,找到存有幣的那個),右鍵-復制;
2.
依次打開
幫助
-
調試窗口
-
控制台,輸入命令
mpprivkey
(空格)
,粘貼剛才復制的地址,回車;
3.
現在你應該能看到你得私鑰了,它是一串52位的字元,復制下來;
4.
打開Multibit,假設你這裡面沒錢,選擇工具
-
導出私鑰,選擇路徑,選擇不需要加密,點導出私鑰;
5.
用記事本打開剛才導出的.key文件,這裡面存了你剛才導出的私鑰(以#開頭的行是注釋),把這個私鑰換成你剛才復制的那個,後面的時間可以不動,保存後退出;
6.

工具
-
導入私鑰,選擇剛才修改的.key文件,導入;
7.
短暫的更新以後你應該就能看到導入的原來的地址,還有原來地址中你的余額。提醒:
1.
務必不要泄露你的私鑰,知道了私鑰就可以支配對應地址里的比特幣!
2.
其他客戶端,如electrum,
Armory都可以用類似的方法導入和導出,但是私鑰的格式有51位的和52位的,可能不全通用。

『陸』 如何在Core錢包中提取BCC

對任何錢包都通用的領取BCC的辦法就是提取私鑰,然後導入BCC錢包。
如果你的比特幣是存在bitcoin qt\core\unlimited\classic等完整節點錢包,最簡單的辦法就是將你原來的bitcoin錢包里的wallet.dat文件復制到你新安裝的bitcoin abc對應的目錄里。就可以了。

一般bitcoin 錢包的wallet.dat存放路徑在不同的系統下是不一樣的,一般情況下是在以下目錄:
Win7: %APPDATA%\Bitcoin\ (直接在運行命令行里輸入這串字元就可以找到wallet.dat文件)
Win10:\Program Files\Bitcoin\Bitcoin
Mac OS:~/Library/Application Support/Bitcoin/

你也可以單獨將某個私鑰導入到bitcoin abc錢包
第一步是先找出你存有BCC幣的地址的私鑰。
如果是存在bitcoin core\qt\unlimited\classic等 錢包,則先打開bitcoin,然後復制對應的地址,然後點擊:
「幫助——調試窗口——控制台」
在命令窗口處輸入;
walletpassphrase abc123 600
(命令解釋:walletpassphrase就是在你指定的時間內解除錢包密碼,第一個參數是密碼,後面跟著第二個參數是你需要解除密碼的時間,單位是秒。我這里使用的密碼是abc123,600秒內解除密碼。記得兩個參數前面都有空格哦。)
然後再在命令窗口處輸入:
mpprivkey 地址(如)
(命令解釋:mpprivkey就是將後面比特幣地址對應的私鑰以明文方式顯示。記得參數前面有空格哦。)
輸入以上命令後回車,你就得到一串字元串,有字母有數字。這串字元串就是你對應地址的私鑰。
復制你這串私鑰。
如果你的地址是存在某個輕錢包,比如比太,你可以先使用比太的導出私鑰明文功能:
「點擊有幣的地址——右上角三個點呼出菜單——私鑰管理——私鑰明文」
輸入密碼後,你就可以看到你的私鑰明文了。
如果你使用的地址是存在HD錢包,比如Breadwallet,你也可以先找到密語:

『柒』 如何從pem格式的私鑰文件中讀取私鑰

以下命令來生成密鑰對。

$openssl genrsa -out mykey.pem 2048

$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem \
-out private_key.pem -nocrypt

這個命令得到的公共密鑰。
$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

我寫了兩方法讀取私鑰和公鑰

分別。public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");
//System.out.println("Private key\n"+privKeyPEM);

Base64 b64 = new Base64();
byte [] decoded = b64.decode(privKeyPEM);

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePrivate(spec);
}

public PublicKey getPemPublicKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String publicKeyPEM = temp.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = privKeyPEM.replace("-----END PUBLIC KEY-----", "");

Base64 b64 = new Base64();
byte [] decoded = b64.decode(publicKeyPEM);

X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePublic(spec);
}

『捌』 php 如何生成2048的私鑰和1024的公鑰長度

以下命令來生成密鑰對。

$openssl genrsa -out mykey.pem 2048

$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem \
-out private_key.pem -nocrypt

這個命令得到的公共密鑰。
$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

我寫了兩方法讀取私鑰和公鑰

分別。public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");
//System.out.println("Private key\n"+privKeyPEM);

Base64 b64 = new Base64();
byte [] decoded = b64.decode(privKeyPEM);

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePrivate(spec);
}

public PublicKey getPemPublicKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String publicKeyPEM = temp.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = privKeyPEM.replace("-----END PUBLIC KEY-----", "");

Base64 b64 = new Base64();
byte [] decoded = b64.decode(publicKeyPEM);

X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePublic(spec);
}

熱點內容
區塊鏈在那玩 發布:2025-07-16 07:26:21 瀏覽:218
濰坊區塊鏈產業園 發布:2025-07-16 07:26:14 瀏覽:245
以太坊礦機機箱 發布:2025-07-16 07:17:03 瀏覽:367
eth壙機 發布:2025-07-16 07:14:33 瀏覽:897
狗狗幣doge交易平台 發布:2025-07-16 07:08:01 瀏覽:854
CC幣和區塊鏈是什麼關系 發布:2025-07-16 07:07:55 瀏覽:429
58比特幣交易 發布:2025-07-16 06:53:46 瀏覽:100
台灣人為什麼去月子中心 發布:2025-07-16 06:48:09 瀏覽:731
烏克蘭比特幣 發布:2025-07-16 06:20:50 瀏覽:799
金融裡面的區塊鏈 發布:2025-07-16 06:11:23 瀏覽:530