node.js - 如何在区块链中解密?
问题描述
我被要求将 BlockChain 用于我正在构建的 Web 应用程序,而我之前没有听说过它,在搜索了一些关于它的信息之后,现在我明白了它是关于什么的。因此,基本上它以块的形式加密了一些数据,这样,数据是安全的。
例如,我有这个从互联网上获取的代码:
const SHA256 = require('crypto-js/sha256')
class Block {
constructor(timestamp, data) {
this.index = 0;
this.timestamp = timestamp;
this.data = data;
this.previousHash = "0";
this.hash = this.calculateHash();
this.nonce = 0;
}
calculateHash() {
return SHA256(this.index + this.previousHash + this.timestamp + this.data + this.nonce).toString();
}
mineBlock(difficulty) {
}
}
class Blockchain{
constructor() {
this.chain = [this.createGenesis()];
}
createGenesis() {
return new Block(0, "01/01/2017", "Genesis block", "0")
}
latestBlock() {
return this.chain[this.chain.length - 1]
}
addBlock(newBlock){
newBlock.previousHash = this.latestBlock().hash;
newBlock.hash = newBlock.calculateHash();
this.chain.push(newBlock);
}
checkValid() {
for(let i = 1; i < this.chain.length; i++) {
const currentBlock = this.chain[i];
const previousBlock = this.chain[i - 1];
if (currentBlock.hash !== currentBlock.calculateHash()) {
return false;
}
if (currentBlock.previousHash !== previousBlock.hash) {
return false;
}
}
return true;
}
}
let jsChain = new Blockchain();
jsChain.addBlock(new Block("12/25/2017", {amount: 5}));
jsChain.addBlock(new Block("12/26/2017", {amount: 10}));
如您所见,我们已经在块中加密了“创世块”(如果我没记错的话)。
好的,如果我想解密数据以获取“创世块”怎么办?这可能吗?
我是新手,所以我觉得它有点混乱......我了解它的含义,但我不知道如何将它实施到我的网络应用程序中。我的网络应用程序基本上从数据库中获取一些信息,将这些信息显示给最终用户,最终用户会向必须通过链接付款的客户发送电子邮件。
解决方案
区块链不是要加密数据以保证其“安全”;它们是关于创建一个需要多方同意的状态更改的可审计分类帐。就比特币而言,它们代表了货币在不同钱包中的分布,并记录了改变这种分布的交易。
区块链是一项非常专业的技术,虽然在少数情况下它们很有用,但也有很多人在寻找适合解决方案的问题。你最好先分析你的实际问题,然后寻找解决这些问题的技术。
在这种情况下,您的第一要务应该是一般安全性——如果有人设法UPDATE
在您的内部数据库上运行,那么已经出现了非常严重的问题。作为“纵深防御”的一部分,您可能还需要对已进行的更改进行审计跟踪。这可能意味着选择一种形成仅附加分类帐的数据库技术,但与传统区块链不同,您可能不需要基于分布式共识。您可能会发现,实际上拥有一个单独安全的审核日志,您可以交叉检查是否发生任何可疑情况,这对于您所期望的场景来说已经足够了。
最后,如果您确实认为基于区块链的分类帐可以解决您遇到的实际问题,请寻找可以利用的现有实现,出于同样的原因,您不会尝试从头开始编写 MySQL。
推荐阅读
- php - Wordpress 插件不会加载 css
- javascript - HTML 视频未加载
- php - Google Adwords 在不存在的页面中检测“恶意软件”
- acumatica - 基于 ItemClass 的具有 InventoryAttribute 和 PXRestrictor 的自定义字段在 2018R1 中不再有效
- python - 我正在尝试使用 for 循环和 np.concatenate 将索引为 0 的所有行从一个数组放入另一个数组
- node.js - node.js:使用 es6 导入 socket.io
- objective-c - 桥接目标 c 代码后出现未知类型名称
- c# - 将导航和动画结合在一起
- android - Viewpager 滑动不适用于回收站视图
- java - 当我在设备中运行我的项目时,CardView 不可见