中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何編寫區塊鏈項目

發布時間:2021-08-26 13:55:43 來源:億速云 閱讀:111 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Java如何編寫區塊鏈項目”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java如何編寫區塊鏈項目”這篇文章吧。

前言

區塊鏈是數字加密貨幣比特幣的核心技術。

區塊鏈是一個稱為塊的記錄列表,這些記錄使用鏈表鏈接在一起并使用加密技術。

每個數據塊都包含自己的數字指紋(稱為散列)、前一個數據塊的散列、時間戳和所做事務的數據,使其在任何類型的數據泄露時都更加安全。

因此,如果一個塊的數據被改變,那么它的散列也會改變。如果散列被更改,那么它的散列將不同于下一個塊,下一個塊包含前一個塊的散列,影響它之后的所有塊的散列。更改哈希值,然后將其與其他塊進行比較,這允許我們檢查區塊鏈。

區塊鏈實施:以下是區塊鏈實施中使用的功能。

1. 創建塊:要創建塊,將實現塊類。在類塊中:

  • hash哈希將包含塊的哈希和

  • previousHash將包含上一個塊的哈希。

  • 字符串數據用于存儲塊的數據和

  • long timeStamp用于存儲塊的時間戳。這里,long數據類型用于存儲毫秒數。

  • calculateHash()生成散列

下面是類塊的實現:

// Java implementation for creating
// a block in a Blockchain
  
import java.util.Date;
  
public class Block {
  
    // Every block contains
    // a hash, previous hash and
    // data of the transaction made
    public String hash;
    public String previousHash;
    private String data;
    private long timeStamp;
  
    // Constructor for the block
    public Block(String data,
                 String previousHash)
    {
        this.data = data;
        this.previousHash
            = previousHash;
        this.timeStamp
            = new Date().getTime();
        this.hash
            = calculateHash();
    }
  
    // Function to calculate the hash
    public String calculateHash()
    {
        // Calling the "crypt" class
        // to calculate the hash
        // by using the previous hash,
        // timestamp and the data
        String calculatedhash
            = crypt.sha256(
                previousHash
                + Long.toString(timeStamp)
                + data);
  
        return calculatedhash;
    }
}

2. 生成哈希:要生成哈希,使用SHA256算法。

下面是算法的實現。

// Java program for Generating Hashes
  
import java.security.MessageDigest;
  
public class crypt {
  
    // Function that takes the string input
    // and returns the hashed string.
    public static String sha256(String input)
    {
        try {
            MessageDigest sha
                = MessageDigest
                      .getInstance(
                          "SHA-256");
            int i = 0;
  
            byte[] hash
                = sha.digest(
                    input.getBytes("UTF-8"));
  
            // hexHash will contain
            // the Hexadecimal hash
            StringBuffer hexHash
                = new StringBuffer();
  
            while (i < hash.length) {
                String hex
                    = Integer.toHexString(
                        0xff & hash[i]);
                if (hex.length() == 1)
                    hexHash.append('0');
                hexHash.append(hex);
                i++;
            }
  
            return hexHash.toString();
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

3. 存儲塊:現在,讓我們通過調用Block類的構造函數將塊及其哈希值存儲在Block類型的ArrayList中。

// Java implementation to store
// blocks in an ArrayList
  
import java.util.ArrayList;
  
public class GFG {
  
    // ArrayList to store the blocks
    public static ArrayList<Block> blockchain
        = new ArrayList<Block>();
  
    // Driver code
    public static void main(String[] args)
    {
        // Adding the data to the ArrayList
        blockchain.add(new Block(
            "First block", "0"));
        blockchain.add(new Block(
            "Second block",
            blockchain
                .get(blockchain.size() - 1)
                .hash));
  
        blockchain.add(new Block(
            "Third block",
            blockchain
                .get(blockchain.size() - 1)
                .hash));
  
        blockchain.add(new Block(
            "Fourth block",
            blockchain
                .get(blockchain.size() - 1)
                .hash));
  
        blockchain.add(new Block(
            "Fifth block",
            blockchain
                .get(blockchain.size() - 1)
                .hash));
    }
}

4. 區塊鏈有效性:最后,我們需要通過創建布爾方法來檢查區塊鏈的有效性。此方法將在“Main”類中實現,并檢查散列是否等于計算的散列。如果所有哈希值都等于計算的哈希值,則該塊有效。

以下是有效性的實施情況:

// Java implementation to check
// validity of the blockchain
  
// Function to check
// validity of the blockchain
public static Boolean isChainValid()
{
    Block currentBlock;
    Block previousBlock;
  
    // Iterating through
    // all the blocks
    for (int i = 1;
         i < blockchain.size();
         i++) {
  
        // Storing the current block
        // and the previous block
        currentBlock = blockchain.get(i);
        previousBlock = blockchain.get(i - 1);
  
        // Checking if the current hash
        // is equal to the
        // calculated hash or not
        if (!currentBlock.hash
                 .equals(
                     currentBlock
                         .calculateHash())) {
            System.out.println(
                "Hashes are not equal");
            return false;
        }
  
        // Checking of the previous hash
        // is equal to the calculated
        // previous hash or not
        if (!previousBlock
                 .hash
                 .equals(
                     currentBlock
                         .previousHash)) {
            System.out.println(
                "Previous Hashes are not equal");
            return false;
        }
    }
  
    // If all the hashes are equal
    // to the calculated hashes,
    // then the blockchain is valid
    return true;
}

區塊鏈的優勢

  • Blokchain是一個分布式系統網絡。因此,數據泄露很難實施。

  • 由于區塊鏈生成了每個區塊的散列,因此很難進行惡意攻擊。

  • 數據篡改將改變每個塊的哈希值,從而使區塊鏈無效

區塊鏈如何工作?

區塊鏈的基本單位是塊。一個塊能封裝多個事務或者其它有價值的數據:

Java如何編寫區塊鏈項目

我們用哈希值表示一個塊。生成塊的哈希值叫做“挖掘”塊。挖掘塊通常在計算上很昂貴,因為它可以作為“工作證明”。

塊的哈希值通常由以下數據組成:

  • 首先,塊的哈希值由封裝的事務組成。

  • 哈希也由塊創建的時間戳組成

  • 它還包括一個 nonce,一個在密碼學中使用的任意數字

  • 最后,當前塊的哈希也包括前一個塊的哈希

網絡中的多個節點可以同時對數據塊進行挖掘。除了生成哈希外,節點還必須驗證添加到塊中的事務是否合法。先挖一個街區,就贏了比賽!

以上是“Java如何編寫區塊鏈項目”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青阳县| 荔波县| 朔州市| 临沭县| 鄂伦春自治旗| 梅河口市| 启东市| 成武县| 宁陵县| 梓潼县| 峨边| 杭锦旗| 鄯善县| 个旧市| 永兴县| 邻水| 扶余县| 淮安市| 阳西县| 浦江县| 刚察县| 逊克县| 四平市| 安吉县| 聂荣县| 普洱| 泽库县| 桃园县| 海淀区| 腾冲县| 宁明县| 沅江市| 贵德县| 房产| 奇台县| 旬阳县| 临湘市| 潞西市| 息烽县| 天全县| 永春县|