當前位置:首頁 » 以太坊知識 » 以太坊如何用私鑰簽名交易

以太坊如何用私鑰簽名交易

發布時間: 2021-09-06 11:59:05

A. 怎樣用公開密鑰演算法實現數字簽名要實現具有保密性的數字簽名呢

發送方A用自己的秘密密鑰簽名並用接受者B的公開密鑰加密,B收到報文後用自己的秘密密鑰解密,再用A的公開密鑰核實簽名

B. RSA簽名時是發方用私鑰加密,用私鑰解密,但接收方不知道發方私鑰怎麼解密

但是接收方知道發送方的公鑰啊

樓主首先就沒懂簽名加密的概念,這里說的是分兩部分一 先簽名 二 後加密
舉例來說,一 簽名,假定接收方B已知發送方A的公鑰,則A可以通過用自己的私鑰對整個消息或消息的散列碼加密來產生數字簽名,由於是用發送方A的私鑰對消息加密,所以只有A可加密消息,因此,整個加密後的消息就是數字簽名。
接著是加密,用B的公鑰對或對稱密碼再對消息加密即可。
解密很簡單,因為加密就是B自己的公鑰,只有數字簽名才用到A的私鑰(而此前B已知A的公鑰)

C. 如何利用公私鑰實現數字簽名

數字簽名(Digital Signature)技術是不對稱加密演算法的典型應用。數字簽名的應用過程是,數據源發送方使用自己的私鑰對數據校驗和或其他與數據內容有關的變數進行加密處理,完成對數據的合法「簽名」,數據接收方則利用對方的公鑰來解讀收到的「數字簽名」,並將解讀結果用於對數據完整性的檢驗,以確認簽名的合法性。數字簽名技術是在網路系統虛擬環境中確認身份的重要技術,完全可以代替現實過程中的「親筆簽字」,在技術和法律上有保證。在數字簽名應用中,發送者的公鑰可以很方便地得到,但他的私鑰則需要嚴格保密。

D. 請教大神:使用pfx私鑰生成簽名問題

數字簽名主要經過以下幾個過程:信息發送者使用一單向散列函數(HASH函數)對信息生成信息摘要;信息發送者使用自己的私鑰簽名信息摘要;信息發送者把信息本身和已簽名的信息摘要一起發送出去;信息接收者通過使用與信息發送者使用的同一個單向散列函數(HASH函數)對接收的信息本身生成新的信息摘要,再使用信息發送者的公鑰對信息摘要進行驗證,以確認信息發送者的身份和信息是否被修改過。數字加密主要經過以下幾個過程:當信息發送者需要發送信息時,首先生成一個對稱密鑰,用該對稱密鑰加密要發送的報文;信息發送者用信息接收者的公鑰加密上述對稱密鑰;信息發送者將第一步和第二步的結果結合在一起傳給信息接收者,稱為數字信封;信息接收者使用自己的私鑰解密被加密的對稱密鑰,再用此對稱密鑰解密被發送方加密的密文,得到真正的原文。數字簽名和數字加密的過程雖然都使用公開密鑰體系,但實現的過程正好相反,使用的密鑰對也不同。數字簽名使用的是發送方的密鑰對,發送方用自己的私有密鑰進行加密,接收方用發送方的公開密鑰進行解密,這是一個一對多的關系,任何擁有發送方公開密鑰的人都可以驗證數字簽名的正確性。數字加密則使用的是接收方的密鑰對,這是多對一的關系,任何知道接收方公開密鑰的人都可以向接收方發送加密信息,只有唯一擁有接收方私有密鑰的人才能對信息解密。另外,數字簽名只採用了非對稱密鑰加密演算法,它能保證發送信息的完整性、身份認證和不可否認性,而數字加密採用了對稱密鑰加密演算法和非對稱密鑰加密演算法相結合的方法,它能保證發送信息保密性。

E. 沒有私鑰,只有私鑰加密函數,如何進行數字簽名

  • 在加密體系中,簽名是為了讓對方相信這是你發送的,而不是別人偽造的
    假設,假設哈,用公鑰進行加密,因為這個公鑰是公開的,那麼別人就能假冒你進行簽名
    所以簽名嘛,只能用私鑰



F. RSA簽名時是發方用私鑰加密,但接收方不知道發方私鑰怎麼解密

數字簽名是用用私鑰加密,用公鑰解密。一般的傳輸加密時公鑰加密,私鑰解密。都是不對稱加密演算法。 以下是找的關於數字簽名的一些資料:對文件進行加密只解決

G. 如何使用RSA簽名給給信息加密和解密

{
publicstaticfinalStringKEY_ALGORITHM="RSA";
_ALGORITHM="MD5withRSA";

_KEY="RSAPublicKey";
_KEY="RSAPrivateKey";

/**
*用私鑰對信息生成數字簽名
*
*@paramdata
*加密數據
*@paramprivateKey
*私鑰
*
*@return
*@throwsException
*/
publicstaticStringsign(byte[]data,StringprivateKey)throwsException{
//解密由base64編碼的私鑰
byte[]keyBytes=decryptBASE64(privateKey);

//構造PKCS8EncodedKeySpec對象
=newPKCS8EncodedKeySpec(keyBytes);

//KEY_ALGORITHM指定的加密演算法
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);

//取私鑰匙對象
PrivateKeypriKey=keyFactory.generatePrivate(pkcs8KeySpec);

//用私鑰對信息生成數字簽名
Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(priKey);
signature.update(data);

returnencryptBASE64(signature.sign());
}

/**
*校驗數字簽名
*
*@paramdata
*加密數據
*@parampublicKey
*公鑰
*@paramsign
*數字簽名
*
*@return校驗成功返回true失敗返回false
*@throwsException
*
*/
publicstaticbooleanverify(byte[]data,StringpublicKey,Stringsign)
throwsException{

//解密由base64編碼的公鑰
byte[]keyBytes=decryptBASE64(publicKey);

//構造X509EncodedKeySpec對象
X509EncodedKeySpeckeySpec=newX509EncodedKeySpec(keyBytes);

//KEY_ALGORITHM指定的加密演算法
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);

//取公鑰匙對象
PublicKeypubKey=keyFactory.generatePublic(keySpec);

Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(pubKey);
signature.update(data);

//驗證簽名是否正常
returnsignature.verify(decryptBASE64(sign));
}

/**
*解密<br>
*用私鑰解密
*
*@paramdata
*@paramkey
*@return
*@throwsException
*/
publicstaticbyte[]decryptByPrivateKey(byte[]data,Stringkey)
throwsException{
//對密鑰解密
byte[]keyBytes=decryptBASE64(key);

//取得私鑰
=newPKCS8EncodedKeySpec(keyBytes);
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
KeyprivateKey=keyFactory.generatePrivate(pkcs8KeySpec);

//對數據解密
Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE,privateKey);

returncipher.doFinal(data);
}

/**
*解密<br>
*用私鑰解密
*
*@paramdata
*@paramkey
*@return
*@throwsException
*/
publicstaticbyte[]decryptByPublicKey(byte[]data,Stringkey)
throwsException{
//對密鑰解密
byte[]keyBytes=decryptBASE64(key);

//取得公鑰
X509EncodedKeySpecx509KeySpec=newX509EncodedKeySpec(keyBytes);
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
KeypublicKey=keyFactory.generatePublic(x509KeySpec);

//對數據解密
Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE,publicKey);

returncipher.doFinal(data);
}

/**
*加密<br>
*用公鑰加密
*
*@paramdata
*@paramkey
*@return
*@throwsException
*/
publicstaticbyte[]encryptByPublicKey(byte[]data,Stringkey)
throwsException{
//對公鑰解密
byte[]keyBytes=decryptBASE64(key);

//取得公鑰
X509EncodedKeySpecx509KeySpec=newX509EncodedKeySpec(keyBytes);
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
KeypublicKey=keyFactory.generatePublic(x509KeySpec);

//對數據加密
Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,publicKey);

returncipher.doFinal(data);
}

/**
*加密<br>
*用私鑰加密
*
*@paramdata
*@paramkey
*@return
*@throwsException
*/
publicstaticbyte[]encryptByPrivateKey(byte[]data,Stringkey)
throwsException{
//對密鑰解密
byte[]keyBytes=decryptBASE64(key);

//取得私鑰
=newPKCS8EncodedKeySpec(keyBytes);
KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
KeyprivateKey=keyFactory.generatePrivate(pkcs8KeySpec);

//對數據加密
Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,privateKey);

returncipher.doFinal(data);
}

/**
*取得私鑰
*
*@paramkeyMap
*@return
*@throwsException
*/
(Map<String,Object>keyMap)
throwsException{
Keykey=(Key)keyMap.get(PRIVATE_KEY);

returnencryptBASE64(key.getEncoded());
}

/**
*取得公鑰
*
*@paramkeyMap
*@return
*@throwsException
*/
(Map<String,Object>keyMap)
throwsException{
Keykey=(Key)keyMap.get(PUBLIC_KEY);

returnencryptBASE64(key.getEncoded());
}

/**
*初始化密鑰
*
*@return
*@throwsException
*/
publicstaticMap<String,Object>initKey()throwsException{
KeyPairGeneratorkeyPairGen=KeyPairGenerator
.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(1024);

KeyPairkeyPair=keyPairGen.generateKeyPair();

//公鑰
RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic();

//私鑰
RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate();

Map<String,Object>keyMap=newHashMap<String,Object>(2);

keyMap.put(PUBLIC_KEY,publicKey);
keyMap.put(PRIVATE_KEY,privateKey);
returnkeyMap;
}
}

H. php如何通過keystore獲取到私鑰(以太坊

以太坊源碼go-ethereum怎麼運行
安裝基於MIPS的linux頭文件
$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38

在指定路徑下創建include文件夾,用來存放相關頭文件。
$ mkdir -p $TARGET_PREFIX/include

保證linux源碼是干凈的。
$ make mrproper

生成需要的頭自文件。
$ make ARCH=mips headers_check
$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install

將dest文件夾下的所有文件復制到指定的include文件夾內。zd
$ cp -rv dest/include/* $TARGET_PREFIX/include

最後刪除dest文件夾
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include

I. 如何創建和簽署以太坊交易

交易

區塊鏈交易的行為遵循不同的規則集

  • 由於公共區塊鏈分布式和無需許可的性質,任何人都可以簽署交易並將其廣播到網路。

  • 根據區塊鏈的不同,交易者將被收取一定的交易費用,交易費用取決於用戶的需求而不是交易中資產的價值。

  • 區塊鏈交易無需任何中央機構的驗證。僅需使用與其區塊鏈相對應的數字簽名演算法(DSA)使用私鑰對其進行簽名。

  • 一旦一筆交易被簽名,廣播到網路中並被挖掘到網路中成功的區塊中,就無法恢復交易。

  • 以太坊交易結構

  • 以太坊交易的數據結構:交易0.1個ETH

    {
    'nonce':'0x00', // 十進制:0
    'gasLimit': '0x5208', //十進制: 21000
    'gasPrice': '0x3b9aca00', //十進制1,000,000,000
    'to': '' ,//發送地址
    'value': '0x16345785d8a0000',//100000000000000000 ,10^17
    'data': '0x', // 空數據的十進製表示
    'chainId': 1 // 區塊鏈網路ID
    }

    這些數據與交易內容無關,與交易的執行方式有關,這是由於在以太坊中發送交易中,您必須定義一些其他參數來告訴礦工如何處理您的交易。交易數據結構有2個屬性設計"gas": "gasPrice","gasLimit"。

  • "gasPrice": 單位為Gwei, 為 1/1000個eth,表示交易費用

  • "gasLimit": 交易允許使用的最大gas費用。

  • 這2個值通常由錢包提供商自動填寫。

    除此之外還需要指定在哪個以太坊網路上執行交易(chainId): 1表示以太坊主網。

    在開發時,通常會在本地以及測試網路上進行測試,通過測試網路發放的測試ETH進行交易以避免經濟損失。在測試完成後再進入主網交易。

    另外,如果需要提交一些其它數據,可以用"data"和"nonce"作為事務的一部分附加。

    A nonce(僅使用1次的數字)是以太坊網路用於跟蹤交易的數值,有助於避免網路中的雙重支出以及重放攻擊。

  • 以太坊交易簽名

    以太坊交易會涉及ECDSA演算法,以Javascript代碼為例,使用流行的ethers.js來調用ECDSA演算法進行交易簽名。

  • const ethers = require('ethers')

  • const signer = new ethers.Wallet('錢包地址')


  • signer.signTransaction({

  • 'nonce':'0x00', // 十進制:0

  • 'gasLimit': '0x5208', //十進制: 21000

  • 'gasPrice': '0x3b9aca00', //十進制1,000,000,000

  • 'to': '' ,//發送地址

  • 'value': '0x16345785d8a0000',//100000000000000000 ,10^17

  • 'data': '0x', // 空數據的十進製表示

  • 'chainId': 1 // 區塊鏈網路ID

  • })

  • .then(console.log)
  • 可以使用在線使用程序Composer將已簽名的交易傳遞到以太坊網路。這種做法被稱為」離線簽名「。離線簽名對於諸如狀態通道之類的應用程序特別有用,這些通道是跟蹤兩個帳戶之間余額的智能合約,並且在提交已簽名的交易後就可以轉移資金。離線簽名也是去中心化交易所(DEXes)中的一種常見做法。

    也可以使用在線錢包通過以太坊賬戶創建簽名驗證和廣播。

    使用Portis,您可以簽署交易以與加油站網路(GSN)進行交互。


鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。

J. 以太坊錢包里的以太坊幣,如何交易

可以選擇在數字貨幣交易所進行交易,市場上目前比較主流的數字貨幣交易所分別為幣安、火幣、比特網。

熱點內容
eth幣行今日價格 發布:2024-05-12 03:58:13 瀏覽:950
金旺財富比特幣 發布:2024-05-12 03:53:56 瀏覽:383
k40eth算力多少 發布:2024-05-12 03:50:18 瀏覽:647
挖礦木馬python 發布:2024-05-12 03:25:40 瀏覽:994
trx4橙色車殼真假鑒定 發布:2024-05-12 03:25:39 瀏覽:878
幣圈大佬為什麼喜歡用錢賺錢 發布:2024-05-12 03:08:31 瀏覽:332
最早的幣圈撲克牌 發布:2024-05-12 02:52:57 瀏覽:296
比特幣挖礦錢包地址忘了 發布:2024-05-12 02:43:53 瀏覽:934
trx4舵機調試 發布:2024-05-12 02:28:05 瀏覽:796
btc938手柄連接蘋果 發布:2024-05-12 02:10:23 瀏覽:961