主頁 > 區塊鏈 > HyperledgerFabric:使用FabricGatewayJavaSDK的TLS內部錯誤

HyperledgerFabric:使用FabricGatewayJavaSDK的TLS內部錯誤

2021-10-22 20:33:38 區塊鏈

Fabric 版本:v2.2.4 Fabric 網關版本:v2.2.0

目前,我沒有使用 Fabric CA 和 docker。相反,我使用 OpenSSL 來生成我自己的證書。使用命令列加入通道或呼叫啟用 TLS(服務器 TLS)的鏈代碼沒有問題。

但是,當我嘗試使用帶有 TLS 的 Fabric Gateway Java SDK 呼叫我的鏈代碼時,對等端顯示:

2021-10-20 23:53:51.571 EDT [core.comm] ServerHandshake -> ERRO 411 Server TLS handshake failed in 731.664253ms with error remote error: tls: internal error server=PeerServer remoteaddress=127.0.0.1:48920
2021-10-20 23:53:51.648 EDT [core.comm] ServerHandshake -> ERRO 412 Server TLS handshake failed in 17.623962ms with error remote error: tls: internal error server=PeerServer remoteaddress=127.0.0.1:48924
2021-10-20 23:53:52.389 EDT [core.comm] ServerHandshake -> ERRO 413 Server TLS handshake failed in 31.834126ms with error remote error: tls: internal error server=PeerServer remoteaddress=127.0.0.1:48928
2021-10-20 23:53:53.013 EDT [core.comm] ServerHandshake -> ERRO 414 Server TLS handshake failed in 20.97883ms with error remote error: tls: internal error server=PeerServer remoteaddress=127.0.0.1:48932
2021-10-20 23:53:53.453 EDT [core.comm] ServerHandshake -> ERRO 415 Server TLS handshake failed in 27.840631ms with error remote error: tls: internal error server=PeerServer remoteaddress=127.0.0.1:48936

如果我禁用 TLS,則可以呼叫和查詢鏈碼,但它會顯示一條錯誤訊息并顯示對等方的證書:

04:45:56.020 [main] ERROR org.hyperledger.fabric.sdk.security.CryptoPrimitives - Cannot 
validate certificate. Error is: Path does not chain with any of the trust anchors
Certificate[
[
  Version: V3
  Subject: CN=peer-telecom, OU=peer, O=peer0.telecom.com, ST=Wilayah Persekutuan Kuala Lumpur, C=MY
  Signature Algorithm: SHA256withECDSA, OID = 1.2.840.10045.4.3.2

  Key:  Sun EC public key, 256 bits
  public x coord: 63258922835963897769642318382353579773301130246303245867091942631050654760639
  public y coord: 17014436126955018341557373411142402131278326611630973049174140241981148702177
  parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)
  Validity: [From: Mon Oct 18 04:30:10 EDT 2021,
               To: Tue Oct 18 04:30:10 EDT 2022]
  Issuer: CN=hyperledger-telecom, O=ica.hyperledger.telecom.com, ST=Wilayah Persekutuan Kuala Lumpur, C=MY
  SerialNumber: [    1000]

Certificate Extensions: 4
[1]: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 70 2B 57 B5 7C 6A 38 DE   AB 6F DD 7E C4 63 FE 39  p W..j8..o...c.9
0010: 54 22 D9 F9                                        T"..
]
]

[2]: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:false
  PathLen: undefined
]

[3]: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  DigitalSignature
]

[4]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 62 C2 4A FB 13 54 44 DF   15 AB 2B 09 78 4F 79 4A  b.J..TD... .xOyJ
0010: CB 37 1D D7                                        .7..
]
]

]
  Algorithm: [SHA256withECDSA]
  Signature:
0000: 30 44 02 20 2D 20 15 9D   53 D4 DE EF 56 0D E6 6D  0D. - ..S...V..m
0010: 04 DA 99 F8 0C AC D5 A7   87 66 51 04 23 A0 4D C2  .........fQ.#.M.
0020: C8 98 95 5C 02 20 5C A5   5A 2D 19 43 FA E8 C0 E1  ...\. \.Z-.C....
0030: 49 4E C0 DF C9 59 F8 10   34 D6 94 05 51 38 E9 17  IN...Y..4...Q8..
0040: C5 F1 20 1F 0C EC                                  .. ...

]

Java應用程式代碼:

package org.example.contract;

import java.io.IOException;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;

import java.util.concurrent.TimeoutException;
import java.security.InvalidKeyException;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


import org.hyperledger.fabric.gateway.Identities;
import org.hyperledger.fabric.gateway.Identity;
import org.hyperledger.fabric.gateway.Contract;
import org.hyperledger.fabric.gateway.ContractException;
import org.hyperledger.fabric.gateway.Gateway;
import org.hyperledger.fabric.gateway.Network;
import org.hyperledger.fabric.gateway.Wallet;
import org.hyperledger.fabric.gateway.Wallets;

public class Sample {
    
    X509Certificate[] clientCert = null;
    PrivateKey clientKey = null;

    private static X509Certificate readX509Certificate(final Path certificatePath) throws IOException, CertificateException {
        try (Reader certificateReader = Files.newBufferedReader(certificatePath, StandardCharsets.UTF_8)) {
            return Identities.readX509Certificate(certificateReader);
        }
    }

    private static PrivateKey getPrivateKey(final Path privateKeyPath) throws IOException, InvalidKeyException {
        try (Reader privateKeyReader = Files.newBufferedReader(privateKeyPath, StandardCharsets.UTF_8)) {
            return Identities.readPrivateKey(privateKeyReader);
        }
    }

    public static void main(String[] args) throws IOException {
        // Load an existing wallet holding identities used to access the network.
        // A wallet stores a collection of identities
        Path walletPath = Paths.get(".", "wallet");
        Wallet wallet = Wallets.newFileSystemWallet(walletPath);
        try {
                  
            Path credentialPath = Paths.get("/root","fabric","localtls","crypto-config", "peerOrganizations",
                "org1.telecom.com", "users", "[email protected]", "msp");
            System.out.println("credentialPath: "   credentialPath.toString());
            Path certificatePath = credentialPath.resolve(Paths.get("signcerts",
                "[email protected]"));
            System.out.println("certificatePem: "   certificatePath.toString());
            Path privateKeyPath = credentialPath.resolve(Paths.get("keystore",
                "[email protected]"));
      
            X509Certificate certificate = readX509Certificate(certificatePath);
            PrivateKey privateKey = getPrivateKey(privateKeyPath);
      
            Identity identity = Identities.newX509Identity("Org1MSP", certificate, privateKey);
            
            String identityLabel = "[email protected]";
            wallet.put(identityLabel, identity);
      
            System.out.println("Write wallet info into "   walletPath.toString()   " successfully.");
      
        } catch (IOException | CertificateException | InvalidKeyException e) {
            System.err.println("Error adding to wallet");
            e.printStackTrace();
        }
        // Path to a common connection profile describing the network.
        Path networkConfigFile = Paths.get("/root","fabric","localtls","connection.yaml");

        String userName = "[email protected]";
        // Configure the gateway connection used to access the network.,
        Gateway.Builder builder = Gateway.createBuilder()
                .identity(wallet, userName)
                .networkConfig(networkConfigFile);

        // Create a gateway connection
        try (Gateway gateway = builder.connect()) {

            // Obtain a smart contract deployed on the network.
            Network network = gateway.getNetwork("mychannel");
            Contract contract = network.getContract("chaincode");

            // Submit transactions that store state to the ledger.
            byte[] createCarResult = contract.createTransaction("createMyAsset")
                    .submit("CAR", "Honda");
            System.out.println(new String(createCarResult, StandardCharsets.UTF_8));

            byte[] queryCar = contract.submitTransaction("readMyAsset", "CAR");
            System.out.println(new String(queryCar, StandardCharsets.UTF_8));

        } catch (ContractException | TimeoutException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

連接.yaml:

name: "Network-Config-Test"
description: "The network used in the integration tests"
version: 1.0.0
client:
  organization: telecom

organizations:
  telecom:
    mspid: Org1MSP

    peers:
      - peer0.org1.telecom.com

    #adminPrivateKey:
      #path: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/msp/keystore/[email protected]'

    #signedCert:
      #path: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/msp/signcerts/[email protected]'
      
orderers:
  orderer.example.com:
    url: grpcs://localhost:6050

   
      #client: 
        #keyfile: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/tls/client-o.key'
        #certfile: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/tls/client-o.crt'

    grpcOptions:
      hostnameOverride: orderer.example.com
      grpc-max-send-message-length: 15
      grpc.keepalive_time_ms: 360000
      grpc.keepalive_timeout_ms: 180000
      negotiationType: TLS
      sslProvider: openSSL

    tlsCACerts:
      path: /root/fabric/localtls/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt


peers:
  peer0.org1.telecom.com:
    url: grpcs://localhost:7051
      #client: 
        #keyfile: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/tls/client.key'
        #certfile: '/root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/users/[email protected]/tls/client.crt'

    grpcOptions:
      ssl-target-name-override: peer0.org1.telecom.com
      grpc.http2.keepalive_time: 15
      hostnameOverride: peer0.org1.telecom.com
      negotiationType: TLS
      sslProvider: openSSL
    
    tlsCACerts:
      path: /root/fabric/localtls/crypto-config/peerOrganizations/org1.telecom.com/peers/peer0.org1.telecom.com/tls/ca.crt

我錯過了什么?歡迎任何答案!

更新 1.0 這些是使用 openSSL 生成的證書,它們在我使用命令列時有效(我省略了主題備用名稱中的 hf 內容,不確定應用程式是否重要?):

tlscacert:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            1f:a5:9f:1a:01:ed:c7:3d:30:ca:27:b6:79:9c:82:10:b8:94:84:23
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = MY, ST = Wilayah Persekutuan Kuala Lumpur, L = Kuala Lumpur, O = rca.verisign.com, CN = tls-verisign
        Validity
            Not Before: Oct 21 03:11:13 2021 GMT
            Not After : Oct 19 03:11:13 2031 GMT
        Subject: C = MY, ST = Wilayah Persekutuan Kuala Lumpur, L = Kuala Lumpur, O = rca.verisign.com, CN = tls-verisign
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:34:b5:ac:a3:42:8c:d4:17:97:ca:16:d5:2f:7a:
                    00:32:bf:fd:dd:02:8a:33:28:ed:c0:53:5d:e0:42:
                    79:0d:08:43:1c:22:83:1e:f0:71:91:08:d6:c3:ec:
                    eb:ac:9c:56:00:da:e8:08:cf:ad:4c:b3:46:e7:e1:
                    39:1c:5f:bf:fc
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                EB:7B:8E:23:26:A7:17:3D:E0:0B:8D:B4:6E:6C:5D:D5:EE:EF:80:AF
            X509v3 Authority Key Identifier:
                keyid:EB:7B:8E:23:26:A7:17:3D:E0:0B:8D:B4:6E:6C:5D:D5:EE:EF:80:AF

            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:63:40:88:2d:c8:51:e5:42:2b:d3:98:60:6f:1e:
         3c:d2:f6:59:48:bb:0c:7c:10:b6:28:27:86:20:58:35:0b:19:
         02:21:00:c7:87:df:79:75:21:8d:bf:bc:be:aa:c9:44:53:b5:
         b4:32:4d:06:2b:a0:05:eb:38:b7:9f:3d:71:80:17:77:69

對等 TLS 證書:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4097 (0x1001)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = MY, ST = Wilayah Persekutuan Kuala Lumpur, L = Kuala Lumpur, O = rca.verisign.com, CN = tls-verisign
        Validity
            Not Before: Oct 21 03:11:13 2021 GMT
            Not After : Oct 21 03:11:13 2022 GMT
        Subject: C = MY, ST = Wilayah Persekutuan Kuala Lumpur, O = tls.peer.telecom.com, CN = tls-peer-telecom
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:76:c2:e9:94:10:03:2c:3b:2d:90:56:e8:b5:30:
                    bf:67:f6:b5:b8:9c:73:cd:28:b3:f2:f7:21:e9:f7:
                    6c:66:38:a9:e8:7c:b0:ea:67:fb:f7:db:72:29:9d:
                    aa:56:20:92:ab:b1:e5:53:2a:a1:19:0b:0c:8b:65:
                    36:fe:98:aa:e1
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Subject Key Identifier:
                08:9D:B8:81:4B:39:0D:B1:D4:BD:EC:49:E5:AC:BA:FB:F1:7A:58:51
            X509v3 Authority Key Identifier:
                keyid:EB:7B:8E:23:26:A7:17:3D:E0:0B:8D:B4:6E:6C:5D:D5:EE:EF:80:AF

            X509v3 Subject Alternative Name:
                IP Address:127.0.0.1
    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:c0:d7:26:b4:e9:30:08:b5:37:46:66:0f:fb:
         b6:36:22:04:5f:78:ab:ae:ff:7f:48:e0:7b:ff:e8:f0:88:b4:
         e5:02:21:00:86:64:ec:c8:9b:b4:06:b5:3d:d3:c1:54:4f:d2:
         a2:bb:1a:e1:a7:e7:84:28:9a:ef:ac:db:ab:65:95:0d:10:2d

我在證書中唯一缺少的是:

1.2.3.4.5.6.7.8.1:
                {"attrs":{"hf.Affiliation":"","hf.EnrollmentID":"peer0","hf.Type":"peer"}}

這是否僅由 Fabric CA 使用?還是必須包括在內?

uj5u.com熱心網友回復:

Fabric TLS 證書非常繁瑣例如,我們發現了幾種情況,peer 和 chaincode 會接受格式錯誤的證書,但網關客戶端拒絕使用相同的證書進行連接。可能發生的情況是您的 openssl 生成的證書有問題,但是peer報告錯誤太松懈了。(客戶端 TLS 庫只是斷開連接,而不報告握手期間的根故障,這也無濟于事。)

在上面的示例中,證書輸出顯示了與Fabric CA 通常生成的內容不同的一些差異PathLenKeyUsage屬性。

以下是我們發現在除錯網關/客戶端 SDK 的 TLS 握手問題時有用的一些想法和技術。嘗試使用這些技術來縮小您的證書與 Fabric CA 生成的參考證書之間的任何差距:

  • 使用結構 CA。即使您計劃使用 OpenSSL 和外部授權生成證書鏈,您也可以使用 Fabric CA 生成 TLS 注冊和證書,并將參考證書與您使用 OpenSSL 構建的證書進行比較

  • 使用curl, 或其他啟用 TLS 的客戶端來幫助驗證證書的正確性。在很多情況下,獨立客戶端輸出的錯誤直接適用于連接結構客戶端時失敗的 TLS 握手。

  • 使用test-network-k8s系統作為設定 TLS 和 CA 基礎設施的參考。除了“按鈕”測驗網路之外,這將提供 CA 端點,可用于生成參考注冊/證書以供學習。

  • 檢查 Fabric CA 生成的證書,并與您手工制作的證書進行比較。例如,這里是使用 Kube 測驗網路生成的 TLS 證書的證書轉儲 - 確保您的 OpenSSL 證書具有相同或相似的功能集和屬性。

$ openssl x509 -in /tmp/ca-cert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            4c:63:74:d5:99:29:ce:e0:b6:28:a2:b5:a4:0e:a0:c1:f3:e9:a9:d5
    Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=US, ST=North Carolina, O=Hyperledger, OU=Fabric, CN=fabric-ca-server
        Validity
            Not Before: Oct 21 10:36:00 2021 GMT
            Not After : Oct 17 10:36:00 2036 GMT
        Subject: C=US, ST=North Carolina, O=Hyperledger, OU=Fabric, CN=fabric-ca-server
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub: 
                    04:53:f4:ad:e6:6b:4c:75:7e:4a:6d:6e:cd:73:b0:
                    81:a8:d7:d7:55:c0:fd:22:92:15:fc:2d:20:44:c6:
                    ec:55:c9:cc:88:3a:14:09:77:e5:4f:4b:b8:98:ee:
                    71:09:da:e6:f8:7c:f7:39:fa:41:fc:f3:a2:fe:a4:
                    1e:34:ec:a9:b5
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:1
            X509v3 Subject Key Identifier: 
                AB:AF:85:A3:D3:2E:9A:A9:03:49:F5:5C:30:32:2B:92:EC:92:B3:D0
            X509v3 Subject Alternative Name: 
                IP Address:127.0.0.1
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:bf:cc:c1:d2:29:b1:04:3f:55:31:c6:b7:69:
         ca:72:12:d7:67:55:14:cd:23:f7:75:16:6c:b1:63:7f:e6:9c:
         24:02:20:5d:ff:e3:7e:84:22:d3:f3:52:bd:96:fa:dc:2d:94:
         2f:6b:a3:bc:ab:3e:b3:87:10:fd:30:51:a2:4a:ca:ce:b4
-----BEGIN CERTIFICATE-----
MIICKDCCAc6gAwIBAgIUTGN01ZkpzuC2KKK1pA6gwfPpqdUwCgYIKoZIzj0EAwIw
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
Y2Etc2VydmVyMB4XDTIxMTAyMTEwMzYwMFoXDTM2MTAxNzEwMzYwMFowaDELMAkG
A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl
cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy
dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU/St5mtMdX5KbW7Nc7CBqNfX
VcD9IpIV/C0gRMbsVcnMiDoUCXflT0u4mO5xCdrm Hz3OfpB/POi/qQeNOyptaNW
MFQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE
FKuvhaPTLpqpA0n1XDAyK5LskrPQMA8GA1UdEQQIMAaHBH8AAAEwCgYIKoZIzj0E
AwIDSAAwRQIhAL/MwdIpsQQ/VTHGt2nKchLXZ1UUzSP3dRZssWN/5pwkAiBd/ N 
hCLT81K9lvrcLZQva6O8qz6zhxD9MFGiSsrOtA==
-----END CERTIFICATE-----

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/331229.html

標籤:爪哇 ssl 超级账本结构 超级账本

上一篇:詹金斯:如何保持特定的構建更長時間?

下一篇:什么是默認SSL背景關系以及可以配置多少個SSL背景關系?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more