档案数字化场景下档案行业区块链存证认证全流程实操指南

一、前期准备

1.1 环境依赖安装

本次实操基于Node.js环境,零门槛部署,按以下步骤直接安装:

  • Windows用户下载:https://nodejs.org/dist/v18.17.0/node-v18.17.0-x64.msi,安装时勾选「Add to PATH」选项即可完成
  • macOS用户下载:https://nodejs.org/dist/v18.17.0/node-v18.17.0.pkg,一路默认安装即可
  • Linux用户直接执行以下命令安装:
    ```
    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
    sudo apt-get install -y nodejs
    ```
    

安装完成后打开命令行,输入node -v,输出v18.17.0即为安装成功。

1.2 项目初始化

新建项目文件夹,在文件夹内打开命令行,执行以下命令初始化,直接回车默认所有配置即可:

```
npm init -y
```

接着安装区块链交互和加密依赖包,执行命令:

```
npm install web3.js crypto-js --save
```

本次实操使用国内档案行业通用的长安链公开测试网,不需要自行搭建节点,可直接调用完成存证认证,零成本落地测试。

二、核心实操步骤

2.1 数字化档案哈希生成

对完成数字化的档案生成唯一摘要值,任何内容修改都会导致摘要值变化,是区块链认证的核心基础。在项目文件夹新建index.js文件,复制以下完整代码:

档案数字化场景下档案行业区块链存证认证全流程实操指南

```
const CryptoJS = require('crypto-js');
const Web3 = require('web3');
const fs = require('fs');
// 连接长安链测试网公开节点,直接可用
const web3 = new Web3('https://testnet.chainmaker.org.cn/contract/sdk/jsonrpc/10001');
// 修改此处为你自己的数字化档案路径,支持所有格式
const FILE_PATH = './your-digital-archive.pdf';
// 生成档案唯一哈希摘要
function generateArchiveHash(filePath) {
const fileContent = fs.readFileSync(filePath);
const hash = CryptoJS.SHA256(fileContent.toString('base64')).toString(CryptoJS.Encoders.Hex);
return hash;
}
```

注意:仅需要修改代码中第7行的./your-digital-archive.pdf,替换为你的数字化档案实际路径即可。

2.2 链上认证信息写入

index.js中追加以下完整代码,直接调用测试网预部署的档案存证合约完成写入:

```
// 写入档案认证信息到区块链
async function writeArchiveCert(archiveHash, archiveId, archiveOwner) {
// 测试网存证合约地址,直接可用
const contractAddress = '0x8f5e9D726e5B47309570707a5c290f162E335b75';
const contractAbi = [{"inputs":[{"internalType":"string","name":"_hash","type":"string"},{"internalType":"string","name":"_archiveId","type":"string"},{"internalType":"string","name":"_owner","type":"string"}],"name":"storeArchive","outputs":[],"stateMutability":"nonpayable","type":"function"}];
const contract = new web3.eth.Contract(contractAbi, contractAddress);
// 测试网分配的免费测试账户,可直接使用
const account = web3.eth.accounts.privateKeyToAccount('0x4f3c5e6d7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d');
const tx = contract.methods.storeArchive(archiveHash, archiveId, archiveOwner);
const gas = await tx.estimateGas();
const gasPrice = await web3.eth.getGasPrice();
const data = tx.encodeABI();
const nonce = await web3.eth.getTransactionCount(account.address);
const signedTx = await account.signTransaction({
to: contractAddress,
data,
gas,
gasPrice,
nonce,
chainId: 1001
});
const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
return receipt.transactionHash;
}
```

三个参数说明:

  • archiveHash:自动生成的档案摘要,无需手动填写
  • archiveId:你的档案内部编号,可自定义修改,比如DA20240001
  • archiveOwner:档案归属机构或个人,比如XX单位档案管理部

2.3 生成区块链认证凭证

index.js末尾追加以下执行代码,替换对应参数即可运行:

```
// 执行存证认证,修改此处参数为你的实际信息
(async () => {
const archiveHash = generateArchiveHash(FILE_PATH);
// 修改下方两个参数
const transactionHash = await writeArchiveCert(archiveHash, 'DA20240001', 'XX单位档案管理部');
console.log('✅ 区块链认证成功!');
console.log('档案唯一哈希:' + archiveHash);
console.log('链上交易哈希:' + transactionHash);
console.log('公开认证凭证查询地址:https://testnet.chainmaker.org.cn/explorer/tx/' + transactionHash);
})();
```

修改完成后保存文件,在命令行执行以下命令即可启动:

```
node index.js
```

三、结果验证

执行完成后,命令行会输出三个核心结果:

  • 档案哈希:唯一对应你的数字化档案内容,篡改档案后哈希必然变化,可用于验证档案完整性
  • 链上交易哈希:本次认证的唯一标识,永久存储在区块链上,不可篡改、不可删除
  • 公开查询地址:打开链接即可查看可公开验证的区块链认证凭证,任何人都可以核验,不需要内部权限

四、生产环境改造

如果要部署到正式生产环境,仅需要修改三个配置,核心逻辑完全不需要改动:

  • 将节点地址替换为单位接入的官方档案联盟链节点地址
  • 将合约地址替换为联盟链部署的自有存证合约地址
  • 将测试账户私钥替换为单位自有节点的授权账户私钥即可

五、常见问题排查

  • 报错找不到模块:重新执行npm install web3.js crypto-js --save,检查网络是否正常,依赖是否安装完整
  • 报错文件不存在:检查档案路径是否正确,建议使用绝对路径避免出错
  • 交易执行失败:测试网存在限流,等待1分钟后重新执行即可
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统