當前位置:首頁 » 比特幣問答 » csecp256k1比特幣

csecp256k1比特幣

發布時間: 2021-09-20 11:19:50

以太坊架構是怎麼樣的

以太坊最上層的是DApp。它通過Web3.js和智能合約層進行交換。所有的智能合約都運行在EVM(以太坊虛擬機)上,並會用到RPC的調用。在EVM和RPC下面是以太坊的四大核心內容,包括:blockChain, 共識演算法,挖礦以及網路層。除了DApp外,其他的所有部分都在以太坊的客戶端里,目前最流行的以太坊客戶端就是Geth(Go-Ethereum)

比特幣錢包地址是如何得到的不是比特幣地址而是錢包地址!

首先,你應該在大腦中想像出一個「錢包」的概念。你的bitcoin都放在你的「錢包」中一個錢包可以包含很多很多......很多個地址。地址的形式就是形如。

利用比特幣錢包中生成的比特幣地址你可以接收來自他人的比特幣,你也可以將你帳戶上的比特幣轉到他人的比特幣地址上面。比特幣地址就像銀行卡號一樣,具有支付、轉賬、提現功能,但在轉賬時,你只有知道別人的比特幣地址才能進行比特幣轉賬。

如果我們把比特幣錢包簡單比作成銀行卡賬戶的話,那麼比特幣錢包地址就可以看成是銀行卡賬號。不同的是,比特幣地址是可以不存儲在網路上的,更是可以獨立於你的錢包而存在的。

(2)csecp256k1比特幣擴展閱讀:

比特幣地址是一串由 26位到34位字母和數字字元串組成的。 看上去像一堆亂碼一樣,說白了這個就像你的銀行卡卡號一樣。 通過區塊鏈查可以查每個比特幣地址的所有轉賬記錄,公開透明。

比特幣錢包地址生成:通過隨機選出256位二進制數字,形成私鑰,然後通過加密函數來生成地址。這個生成方向是單向的。也就是你知道了地址是無法通過解密方法來計算出私鑰的。就目前的人類計算機運算能力無法破解,你可以很放心地把地址公布到網上。

參考鏈接:比特幣|網路

③ 為什麼區塊鏈私鑰 中的字母只有a-f之間

私鑰:實際上是一組隨機數,關於區塊鏈中的隨機數我們已經介紹過了
公鑰:對私鑰進行橢圓曲線加密演算法生成,但是無法通過公鑰倒推得到私鑰。公鑰的作用是在和對方交易時,使用自己的私鑰加密信息,然後對方使用自己的公鑰解密獲得原始信息,這個過程俗稱簽名。
地址:由於公鑰太長,在交易中不方便使用,就對公鑰哈希進行SHA256、RIPEMD160、Base58演算法加密生成地址

  • 首先使用隨機數發生器生成一個『私鑰』。後續的公鑰、地址都會由私鑰生成,所以一句話概括私鑰的重要性:"誰掌握了私鑰, 誰就掌握了該錢包的使用權!"

  • 『私鑰』經過橢圓曲線演算法(SECP256K1)演算法加密生成了'公鑰'。這是一種非對稱單向加密演算法,知道私鑰可以算出公鑰,但知道公鑰卻無法反向算出私鑰

  • 『公鑰』經過單向Hash演算法(SHA256、RIPEMD160)生成『公鑰Hash』

  • 將一個位元組的地址版本號連接到『公鑰哈希』頭部(對於比特幣網路的pubkey地址,這一位元組為「0」),然後對其進行兩次SHA256運算,將結果的前4位元組作為『公鑰哈希』的校驗值,連接在其尾部。

  • 將上一步結果使用BASE58進行編碼(比特幣定製版本),就得到了『錢包地址』。

④ 離線生成的比特幣地址是如何避免沖突的

BTC的地址生成過程如下,完整的可以查一下比特幣中文維基:
比特幣地址的生成過程

(說明: 有些數字以"0x"開頭,意思是此數字使用十六進製表示法。"0x"本身沒有任何含義,它是C語言流傳下來的,約定俗成的寫法,比如0xA就是十進制的10。另外,1個位元組 = 8位二進制 = 2位十六進制)。

第一步,隨機選取一個32位元組的數、大小介於1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間,作為私鑰。


第二步,使用橢圓曲線加密演算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰。 (共65位元組, 1位元組 0x04, 32位元組為x坐標,32位元組為y坐標)關於公鑰壓縮、非壓縮的問題另文說明。
第三步,計算公鑰的 SHA-256 哈希值


第四步,取上一步結果,計算 RIPEMD-160 哈希值


第五步,取上一步結果,前面加入地址版本號(比特幣主網版本號「0x00」)
00

第六步,取上一步結果,計算 SHA-256 哈希值


第七步,取上一步結果,再計算一下 SHA-256 哈希值(哈哈)


第八步,取上一步結果的前4個位元組(8位十六進制)
D61967F6

第九步,把這4個位元組加在第五步的結果後面,作為校驗(這就是比特幣地址的16進制形態)。
00D61967F6

第十步,用base58表示法變換一下地址(這就是最常見的比特幣地址形態)。

⑤ git和區塊鏈的區別

一、相似性

分布式
Git 確保每個代碼倉庫在本地保留完整的項目庫,而不僅僅是自己在工作的這個分支和自己的提交歷史。同時也保留了最近這次 pull 下來後的所有快照和索引信息。

區塊鏈上,每個節點在本地保存完整資料庫,而不僅僅是自己的交易信息。

可追溯性
Git commit 鏈上,每個 commit 對象都包含父級對象(上一次 commit 的對象,除了第一個 commit ),對之前的記錄全部可追溯。

區塊鏈上,每個區塊都包含前一個區塊的索引(除了創世區塊),可以追溯之前所有有效交易。

不可篡改
Git 的 commit 鏈中,每個對象本身在存儲前都計算校驗和,然後以校驗和來引用。一旦修改,校驗和就會不對, 這意味著不可能在 Git 不知情時更改任何文件內容或目錄內容。

Git 用以計算校驗和的機制叫做 SHA-1 散列( hash,哈希)。 這是一個由 40 個十六進制字元( 0-9 和 a-f )組成字元串,基於 Git 中文件的內容或目錄結構計算出來。SHA-1 哈希看起來是這樣:區塊鏈中,每個區塊包含上個區塊 ID,本區塊 ID 兩個 SHA-256 散列,這兩個散列都是基於區塊內容計算出來。一旦修改內容,則散列將變化,和其他節點的鏈不一致,最終不能加入到最長鏈中,因此無法真正篡改內容。

二、差異性

集體共識和中央節點意志: 1 - 區塊鏈是基於集體共識( POW/POS)來 merge,形成最長鏈,最長鏈即為主鏈。

2 - 而 Git 體系裡,通過倉庫託管平台來進行多節點合作時,是平台項目的管理者掌握了 merge 的權力,體現的是中央節點的意志。

密碼學
1 - 比特幣區塊鏈中,密碼學主要用到了以下方式

在比特幣區塊鏈的整個體系中,大量使用了公開的加密演算法,如 Merkle Tree 哈希數演算法,橢圓曲線演算法、哈希演算法、對稱加密演算法及一些編碼演算法。各種演算法在比特幣區塊鏈中的作用如下:

a)哈希演算法

比特幣系統中使用的兩個哈希函數分別是:1.SHA-256,主要用於完成 PoW (工作量證明)計算; 2.RIPEMD160,主要用於生成比特幣地址。

b)Merkle 哈希樹

基於哈希值的二叉樹或多叉樹,在計算機領域,Merkle 樹大多用來進行完整性驗證處理,在分布式環境下,其進行完整性驗證能大量減少數據傳輸和計算的復雜程度。

c)橢圓曲線演算法

比特幣中使用基於 secp256k1 橢圓曲線數學的公鑰密碼學演算法進行簽名與驗證簽名,一方面可以保證用戶的賬戶不被冒名頂替,另一方面保證用戶不能否認其所簽名的交易。用私鑰對交易信息簽名,礦工用用戶的公鑰驗證簽名,驗證通過,則交易信息記賬,完成交易。

d)對稱加密演算法

比特幣官方客戶端使用 AES (對稱分組密碼演算法)加密錢包文件,用戶設置密碼後,採用用戶設置餓密碼通過 AES 對錢包私鑰進行加密,確保客戶端私鑰的安全。

e)Base58 編碼

Base58 是比特幣使用的一種獨特的編碼方式,主要用於產生比特幣的錢包地址,其類似於古典密碼學里的置換演算法機制,目的是為里增加可讀性,把二進制的哈希值變成了我們看到的地址「 」。

2 - Git:主要用了 SSH 秘鑰來進行遠程登錄驗證,用了 SHA-1 來進行代碼內容校驗和。

SSH 是 Secure Shell 的縮寫,由 IETF 的網路工作小組( Network Working Group )所制定,是一種專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。

SSH 傳輸的過程如下: (1)遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶。 (2)用戶使用這個公鑰,將登錄密碼加密後,發送回來。 (3)遠程主機用自己的私鑰,解密登錄密碼,如果密碼正確,允許用戶登錄。

⑥ 比特幣地址是怎麼產生的

比特幣使用橢圓曲線演算法生成公鑰和私鑰,選擇的是secp256k1曲線。生成的公鑰是33位元組的大數,私鑰是32位元組的大數,錢包文件wallet.dat中直接保存了公鑰和私鑰。我們在接收和發送比特幣時用到的比特幣地址是公鑰經過演算法處理後得到的,具體過程是公鑰先經過SHA-256演算法處理得到32位元組的哈希結果,再經過RIPEMED演算法處理後得到20位元組的摘要結果,再經過字元轉換過程得到我們看到的地址。這個字元轉換過程與私鑰的字元轉換過程完成相同,步驟是先把輸入的內容(對於公鑰就是20位元組的摘要結果,對於私鑰就是32位元組的大數)增加版本號,經過連續兩次SHA-256演算法,取後一次哈希結果的前4位元組作為校驗碼附在輸入內容的後面,然後再經過Base58編碼,得到字元串。喬曼特區塊鏈專業站鏈喬教育在線是從事區塊鏈相關培訓,且獲得教育部認證的區塊鏈專業培訓工作站。

⑦ bitcoin私鑰是如何產生的

比特幣地址和私鑰是怎樣生成的?比特幣使用橢圓曲線演算法生成公鑰和私鑰,選擇的是secp256k1曲線。生成的公鑰是33位元組的大數,私鑰是32位元組的大數,錢包文件wallet.dat中直接保存了公鑰和私鑰。我們在接收和發送比特幣時用到的比特幣地址是公鑰經過演算法處理後得到的,具體過程是公鑰先經過SHA-256演算法處理得到32位元組的哈希結果,再經過RIPEMED演算法處理後得到20位元組的摘要結果,再經過字元轉換過程得到我們看到的地址。這個字元轉換過程與私鑰的字元轉換過程完成相同,步驟是先把輸入的內容(對於公鑰就是20位元組的摘要結果,對於私鑰就是32位元組的大數)增加版本號,經過連續兩次SHA-256演算法,取後一次哈希結果的前4位元組作為校驗碼附在輸入內容的後面,然後再經過Base58編碼,得到字元串。

⑧ 私鑰字元串如何轉成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, "初始化密鑰失敗");
}
}
}
}

⑨ 求解模平方根的演算法(答得完整我會再追加分數)

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
#!/usr/bin/python
#coding=gbk
import math
def quick_algorithm(a,b,c): #y=a^b%c,a的b次冪余除c
a = a % c
ans = 1
#這里我們不需要考慮b<0,因為分數沒有取模運算
while b != 0: #費馬小定理
if b & 1:
ans = (ans * a) % c
b>>=1
a = (a * a) % c
return ans
def IsHaveMoSqrt(x,P):#是否有模平方根y*y=x mod p,已知x,p,判斷是否存在y
ret = quick_algorithm(x,(P-1)//2,P)
if ret==1:
return True
else:
return False
def GetMoSqrt(x,P):#求模平方根y*y=x mod p,已知x,p求y
if(IsHaveMoSqrt(x,P)==1):
t=0
s=P-1#P-1=(2^t)*s //s是奇數
while s%2==0:
s=s//2
t=t+1
if(t==1):
ret = quick_algorithm(x,(s+1)//2,P)
return (ret,P-ret)
elif (t>=2):
x_=quick_algorithm(x,P-2,P)
n=1
while(IsHaveMoSqrt(n,P)==1):
n=n+1
b=quick_algorithm(n,s,P)
print(b)
ret = quick_algorithm(x,(s+1)//2,P)#t-1
t_=0
while(t-1>0):
if(quick_algorithm(x_*ret*ret,2**(t-2),P)==1):
ret=ret
else:
ret=ret*(b**(2**t_))%P
t=t-1
t_=t_+1
return (ret,P-ret)
else:
return (-2,-2)
else:
return (-1,-1)
def Secp256k1GetYByX(x):#y^2=x^3+7 (mod p)根據x求y
a=(x*x*x+7)%
ret = GetMoSqrt(a,)
return ret
if __name__ == "__main__":
if True:
x=#私鑰為1,對應的公鑰x
ret = Secp256k1GetYByX(x)#secp256k1,根據x求y
print("x=%x" % (x))
print("y=%x" % (ret[0]))
print("y=%x" % (ret[1]))
print("")
x=1#x最小值
ret = Secp256k1GetYByX(x)#secp256k1,根據x求y
print("x=%x" % (x))
print("y=%x" % (ret[0]))
print("y=%x" % (ret[1]))
print("")
x=-3#x最大值
ret = Secp256k1GetYByX(x)#secp256k1,根據x求y
print("x=%x" % (x))
print("y=%x" % (ret[0]))
print("y=%x" % (ret[1]))
print("")
input()
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

⑩ 誰能最簡單的詳解橢圓曲線演算法,secp256k1 是如何生成公鑰和私鑰的

最簡單的描述,K=kG作者重新定義了橢圓曲線的加法和乘法。並且保證不可逆。之後通過一系列復雜的計算算出了公鑰和加密演算法。比如y^2=Ax^3+Bx^2+Cx+D然後Alice計算出來一個參數(x1,y1) 告訴A,B,C,D到Bob,Bob對應的計算出來(x2,y2)然後雙方通訊,就可以使用公鑰私鑰對進行加解密了。PS:對不起。具體細節我把書送給老師了。手頭沒有資料可以查PS:開始了解這個演算法的時候我也看了ECC加密演算法入門介紹。到現在都不懂。我也不是數學系的。PS:我很後悔當時沒有把這個書上的東西記下來。現在只有一點皮毛的。那本書是《深入淺出密碼學――常用加密技術原理與應用(安全技術經典譯叢)》(美)帕爾,(美)佩爾茨爾著,馬小婷譯PS:最後我很討厭很簡單的東西說的很復雜。在上面這本書大概幾面紙加上最基礎不超過兩位數的算例就解決的問題,上面硬是講的超級復雜。

熱點內容
幣圈買賣點軟體 發布:2025-07-20 13:33:06 瀏覽:315
貝殼找房貝殼幣是區塊鏈嗎 發布:2025-07-20 13:25:10 瀏覽:333
ltc貨幣基金 發布:2025-07-20 13:19:45 瀏覽:944
幣圈三大交易所關閉幣價會降嗎 發布:2025-07-20 13:09:52 瀏覽:968
以太坊商貿是 發布:2025-07-20 12:50:04 瀏覽:412
金三萬數字貨幣 發布:2025-07-20 12:46:15 瀏覽:769
幣圈商家轉錯錢了 發布:2025-07-20 12:26:28 瀏覽:832
區塊鏈應用認證 發布:2025-07-20 12:23:06 瀏覽:542
2018幣圈罵戰名單 發布:2025-07-20 12:13:49 瀏覽:190
熊市幣圈生存法則視頻 發布:2025-07-20 12:03:50 瀏覽:101