nodeJS의 암호화폐 암호화 방식에 대한 자세한 설명
이전 단어
암호화 모듈은 HTTP 또는 HTTPS 연결 중에 보안 자격 증명을 캡슐화하는 방법을 제공합니다. OpenSSL의 해시, hmac, 암호화(cipher), 복호화(decipher), 서명(sign) 및 확인(verify) 방법의 캡슐화도 제공됩니다. 이 글에서는 crypto
crypto
【crypto.setEngine(engine[, flags])】
OpenSSL 일부/전체 기능에 대한 엔진 로드 및 설정(매개변수 플래그에 따라 설정)에 대해 자세히 소개합니다.
engine은 ID이거나 엔진 공유 라이브러리에 대한 경로일 수 있습니다.
flags는 선택적 매개변수이며 기본값은 ENGINE_METHOD_ALL이며 다음 매개변수 중 하나 이상을 조합할 수 있습니다(상수로 정의됨)
ENGINE_METHOD_RSA ENGINE_METHOD_DSA ENGINE_METHOD_DH ENGINE_METHOD_RAND ENGINE_METHOD_ECDH ENGINE_METHOD_ECDSA ENGINE_METHOD_CIPHERS ENGINE_METHOD_DIGESTS ENGINE_METHOD_STORE ENGINE_METHOD_PKEY_METH ENGINE_METHOD_PKEY_ASN1_METH ENGINE_METHOD_ALL ENGINE_METHOD_NONE
【crypto.getCiphers()】
배열을 반환합니다. 지원되는 암호화 알고리즘 이름
crypto = require('crypto'
【crypto.getCiphers()】
지원되는 해시 알고리즘 이름의 배열을 반환합니다.
var crypto = require('crypto'); console.log(crypto.getHashes());//[ 'DSA', 'DSA-SHA', 'DSA-SHA1', 'DSA-SHA1-old', 'RSA-MD4', 'RSA-MD5', 'RSA-MDC2', 'RSA-RIPEMD160', 'RSA-SHA', 'RSA-SHA1', 'RSA-SHA1-2', 'RSA-SHA224', 'RSA-SHA256', 'RSA-SHA384', 'RSA-SHA512', 'dsaEncryption', 'dsaWithSHA', 'dsaWithSHA1', 'dss1', 'ecdsa-with-SHA1', 'md4', 'md4WithRSAEncryption', 'md5', 'md5WithRSAEncryption', 'mdc2', 'mdc2WithRSA', 'ripemd', 'ripemd160', 'ripemd160WithRSA', 'rmd160', 'sha', 'sha1', 'sha1WithRSAEncryption', 'sha224', 'sha224WithRSAEncryption', 'sha256', 'sha256WithRSAEncryption', 'sha384', 'sha384WithRSAEncryption', 'sha512', 'sha512WithRSAEncryption', 'shaWithRSAEncryption', 'ssl2-md5', 'ssl3-md5', 'ssl3-sha1', 'whirlpool' ]
【crypto.getCurves()】
지원되는 타원 곡선 이름의 배열을 반환합니다.
var crypto = require('crypto'); console.log(crypto.getCurves());//[ 'Oakley-EC2N-3', 'Oakley-EC2N-4', 'brainpoolP160r1', 'brainpoolP160t1', 'brainpoolP192r1', 'brainpoolP192t1', 'brainpoolP224r1', 'brainpoolP224t1', 'brainpoolP256r1', 'brainpoolP256t1', 'brainpoolP320r1', 'brainpoolP320t1', 'brainpoolP384r1', 'brainpoolP384t1', 'brainpoolP512r1', 'brainpoolP512t1', 'c2pnb163v1', 'c2pnb163v2', 'c2pnb163v3', 'c2pnb176v1', 'c2pnb208w1', 'c2pnb272w1', 'c2pnb304w1', 'c2pnb368w1', 'c2tnb191v1', 'c2tnb191v2', 'c2tnb191v3', 'c2tnb239v1', 'c2tnb239v2', 'c2tnb239v3', 'c2tnb359v1', 'c2tnb431r1', 'prime192v1', 'prime192v2', 'prime192v3', 'prime239v1', 'prime239v2', 'prime239v3', 'prime256v1', 'secp112r1', 'secp112r2', 'secp128r1', 'secp128r2', 'secp160k1', 'secp160r1', 'secp160r2', 'secp192k1', 'secp224k1', 'secp224r1', 'secp256k1', 'secp384r1', 'secp521r1', 'sect113r1', 'sect113r2', 'sect131r1', 'sect131r2', 'sect163k1', 'sect163r1', 'sect163r2', 'sect193r1', 'sect193r2', 'sect233k1', 'sect233r1', 'sect239k1', 'sect283k1', 'sect283r1', 'sect409k1', 'sect409r1', 'sect571k1', 'sect571r1', 'wap-wsg-idm-ecid-wtls1', 'wap-wsg-idm-ecid-wtls10', 'wap-wsg-idm-ecid-wtls11', 'wap-wsg-idm-ecid-wtls12', 'wap-wsg-idm-ecid-wtls3', 'wap-wsg-idm-ecid-wtls4', 'wap-wsg-idm-ecid-wtls5', 'wap-wsg-idm-ecid-wtls6', 'wap-wsg-idm-ecid-wtls7', 'wap-wsg-idm-ecid-wtls8', 'wap-wsg-idm-ecid-wtls9' ]
MD5
MD5는 모든 데이터에 "서명"을 제공하는 데 일반적으로 사용되는 해싱 알고리즘입니다. 이 서명은 일반적으로 16진수 문자열로 표시됩니다.
[crypto.createHash(algorithm)]
해시 다이제스트를 생성하기 위해 지정된 알고리즘을 사용하여 해시 객체를 생성하고 반환합니다.
매개변수 알고리즘은 플랫폼의 OpenSSL 버전에서 지원하는 알고리즘에 따라 다릅니다. 예를 들어 'sha1', 'md5', 'sha256', 'sha512' 등
【hash.update(data[, input_encoding])】
데이터를 기반으로 해시 내용을 업데이트하며 인코딩 방법은 다음과 같습니다. input_encoding에 의해 결정됩니다. 'utf8', 'ascii' 또는 'binary'가 있습니다. 값이 전달되지 않으면 기본 인코딩은 'utf8'입니다. 데이터가 버퍼인 경우 input_encoding이 무시됩니다.
스트리밍 데이터이기 때문에 다른 데이터로 여러번 호출될 수 있습니다.
【hash.digest([encoding])】
수신 데이터의 해시 다이제스트를 계산합니다. 인코딩은 'hex', 'binary' 또는 'base64'일 수 있으며, 인코딩을 지정하지 않으면 버퍼가 반환됩니다.
[참고] Digest()를 호출한 후에는 해시 객체를 사용할 수 없습니다.
var crypto = require('crypto');var hash = crypto.createHash('md5');// 可任意多次调用update():hash.update('Hello, world!'); hash.update('Hello, nodejs!'); console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544
Hmac
Hmac 알고리즘도 해싱 알고리즘인데, MD5나 SHA1 같은 해싱 알고리즘을 활용할 수 있습니다. 차이점은 Hmac에도 키가 필요하다는 것입니다.
[crypto.createHmac(algorithm, key)]
hmac 객체를 생성 및 반환하고 지정된 알고리즘과 키를 사용하여 hmac 맵을 생성합니다.
읽고 쓸 수 있는 스트림 스트림입니다. 작성된 데이터는 hmac를 계산하는 데 사용됩니다. 스트림 쓰기가 완료되면 read() 메서드를 사용하여 계산된 값을 가져옵니다. 이전 업데이트 및 다이제스트 방법도 지원됩니다.
매개변수 알고리즘은 플랫폼의 OpenSSL 버전에서 지원하는 알고리즘에 따라 다릅니다. 위의 createHash를 참조하세요. 그 키는 hmac 알고리즘에서 사용되는 키입니다
【hmac.update(data)】
데이터를 기반으로 hmac 객체를 업데이트합니다. 스트리밍 데이터이기 때문에 새로운 데이터로 여러 번 호출될 수 있습니다.
【hmac.digest([encoding])】
들어오는 데이터의 hmac 값을 계산합니다. 인코딩은 'hex', 'binary' 또는 'base64'일 수 있으며, 인코딩을 지정하지 않으면 버퍼가 반환됩니다.
[참고] Digest()
var crypto = require('crypto');var hmac = crypto.createHmac('sha256', 'match'); hmac.update('Hello, world!'); hmac.update('Hello, nodejs!');//e82a58066cae2fae4f44e58be1d589b66a5d102c2e8846d796607f02a88c1649console.log(hmac.digest('hex'));
AES
AES是一种常用的对称加密算法,加解密都用同一个密钥。crypto模块提供了AES支持,但是需要自己封装好函数,便于使用:
【crypto.createCipher(algorithm, password)】
使用传入的算法和秘钥来生成并返回加密对象。
algorithm 取决于 OpenSSL,例如'aes192'等。password 用来派生 key 和 IV,它必须是一个'binary' 编码的字符串或者一个buffer。
它是可读写的流 stream 。写入的数据来用计算 hmac。当写入流结束后,使用 read() 方法来获取计算后的值。也支持老的update 和 digest 方法。
【cipher.update(data[, input_encoding][, output_encoding])】
根据 data 来更新哈希内容,编码方式根据 input_encoding 来定,有 'utf8', 'ascii' or 'binary'。如果没有传入值,默认编码方式是'binary'。如果data 是 Buffer,input_encoding 将会被忽略。
output_encoding 指定了输出的加密数据的编码格式,它可用是 'binary', 'base64' 或 'hex'。如果没有提供编码,将返回 buffer 。
返回加密后的内容,因为它是流式数据,所以可以使用不同的数据调用很多次。
【cipher.final([output_encoding])】
返回加密后的内容,编码方式是由 output_encoding 指定,可以是 'binary', 'base64' 或 'hex'。如果没有传入值,将返回 buffer。
[注意]cipher 对象不能在 final() 方法之后调用。
var crypto = require('crypto');function aesEncrypt(data, key) { const cipher = crypto.createCipher('aes192', key);var crypted = cipher.update(data, 'utf8', 'hex'); crypted += cipher.final('hex');return crypted; }var data = 'Hello, this is a secret message!';var key = 'Password!';var encrypted = aesEncrypt(data, key);//8a944d97bdabc157a5b7a40cb180e713f901d2eb454220d6aaa1984831e17231f87799ef334e3825123658c80e0e5d0cconsole.log(encrypted);
【crypto.createDecipher(algorithm, password)】
根据传入的算法和密钥,创建并返回一个解密对象。这是 createCipher() 的镜像
【decipher.update(data[, input_encoding][, output_encoding])】
使用参数 data 更新需要解密的内容,其编码方式是 'binary','base64' 或 'hex'。如果没有指定编码方式,则把 data 当成 buffer 对象。
如果 data 是 Buffer,则忽略 input_encoding 参数。
参数 output_decoding 指定返回文本的格式,是 'binary', 'ascii' 或 'utf8' 之一。如果没有提供编码格式,则返回 buffer。
【decipher.final([output_encoding])】
返回剩余的解密过的内容,参数 output_encoding 是 'binary', 'ascii' 或 'utf8',如果没有指定编码方式,返回 buffer。
[注意]decipher对象不能在 final() 方法之后使用。
var crypto = require('crypto');function aesDecrypt(encrypted, key) { const decipher = crypto.createDecipher('aes192', key);var decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8');return decrypted; }var data = 'Hello, this is a secret message!';var key = 'Password!';var encrypted = '8a944d97bdabc157a5b7a40cb180e713f901d2eb454220d6aaa1984831e17231f87799ef334e3825123658c80e0e5d0c';var decrypted = aesDecrypt(encrypted, key); console.log(decrypted);//Hello, this is a secret message!
可以看出,加密后的字符串通过解密又得到了原始内容。
注意到AES有很多不同的算法,如aes192
,aes-128-ecb
,aes-256-cbc
等,AES除了密钥外还可以指定IV(Initial Vector),不同的系统只要IV不同,用相同的密钥加密相同的数据得到的加密结果也是不同的。加密结果通常有两种表示方法:hex和base64,这些功能Nodejs全部都支持,但是在应用中要注意,如果加解密双方一方用Nodejs,另一方用Java、PHP等其它语言,需要仔细测试。如果无法正确解密,要确认双方是否遵循同样的AES算法,字符串密钥和IV是否相同,加密后的数据是否统一为hex或base64格式
【crypto.createCipheriv(algorithm, key, iv)】
创建并返回一个加密对象,用指定的算法,key 和 iv。
algorithm 参数和 createCipher() 一致。key 在算法中用到.iv 是一个initialization vector.
key 和 iv 必须是 'binary' 的编码字符串或buffers.
【crypto.createDecipheriv(algorithm, key, iv)】
根据传入的算法,密钥和 iv,创建并返回一个解密对象。这是 createCipheriv() 的镜像。
const crypto = require('crypto');function aesEncryptiv(data, key,iv) { const cipher = crypto.createCipher('aes192', key, iv);var crypted = cipher.update(data, 'utf8', 'hex'); crypted += cipher.final('hex');return crypted; }function aesDecryptiv(encrypted, key,iv) { const decipher = crypto.createDecipher('aes192', key, iv);var decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8');return decrypted; }var data = 'Hello, this is a secret message!';var key = 'Password!';var iv = 'match';var encrypted = aesEncryptiv(data, key, iv);var decrypted = aesDecryptiv(encrypted, key, iv);//Hello, this is a secret message!console.log(data);//8a944d97bdabc157a5b7a40cb180e713f901d2eb454220d6aaa1984831e17231f87799ef334e3825123658c80e0e5d0cconsole.log(encrypted);//Hello, this is a secret message!console.log(decrypted);
Diffie-Hellman
【crypto.createDiffieHellman(prime[, prime_encoding][, generator][, generator_encoding])】
使用传入的 prime 和 generator 创建 Diffie-Hellman 秘钥交互对象。
generator 可以是数字,字符串或Buffer。如果没有指定 generator,使用 2
prime_encoding 和 generator_encoding 可以是 'binary', 'hex', 或 'base64'。
如果没有指定 prime_encoding, 则 Buffer 为 prime。如果没有指定 generator_encoding ,则 Buffer 为 generator。
【diffieHellman.generateKeys([encoding])】
生成秘钥和公钥,并返回指定格式的公钥。这个值必须传给其他部分。编码方式: 'binary', 'hex', 或 'base64'。如果没有指定编码方式,将返回 buffer。
【diffieHellman.getPrime([encoding])】
用参数 encoding 指明的编码方式返回 Diffie-Hellman 质数,编码方式为: 'binary', 'hex', 或 'base64'。 如果没有指定编码方式,将返回 buffer。
【diffieHellman.getGenerator([encoding])】
用参数 encoding 指明的编码方式返回 Diffie-Hellman 生成器,编码方式为: 'binary', 'hex', 或 'base64'. 如果没有指定编码方式 ,将返回 buffer。
【diffieHellman.computeSecret(other_public_key[, input_encoding][, output_encoding])】
使用 other_public_key 作为第三方公钥来计算并返回共享秘密(shared secret)。秘钥用input_encoding 编码。编码方式为:'binary', 'hex', 或 'base64'。如果没有指定编码方式 ,默认为 buffer。
如果没有指定返回编码方式,将返回 buffer。
DH算法
DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来。DH算法基于数学原理,比如小明和小红想要协商一个密钥,可以这么做:
1、小明先选一个素数和一个底数,例如,素数p=23,底数g=5(底数可以任选),再选择一个秘密整数a=6,计算A=g^a mod p=8,然后大声告诉小红:p=23,g=5,A=8;
2、小红收到小明发来的p,g,A后,也选一个秘密整数b=15,然后计算B=g^b mod p=19,并大声告诉小明:B=19;
3、小明自己计算出s=B^a mod p=2,小红也自己计算出s=A^b mod p=2,因此,最终协商的密钥s为2。
在这个过程中,密钥2并不是小明告诉小红的,也不是小红告诉小明的,而是双方协商计算出来的。第三方只能知道p=23,g=5,A=8,B=19,由于不知道双方选的秘密整数a=6和b=15,因此无法计算出密钥2。
用crypto模块实现DH算法如下:
var crypto = require('crypto');// xiaoming's keys:var ming = crypto.createDiffieHellman(512);var ming_keys = ming.generateKeys();var prime = ming.getPrime();var generator = ming.getGenerator();//Prime: 8df777257625c66821af697652f28e93af05b9f779af919111b89816faa11c36fcf9df04c76811471a6099800213c4fe8e3fbec8d2f90bd00795e4b7fd241603console.log('Prime: ' + prime.toString('hex'));//Generator: 02console.log('Generator: ' + generator.toString('hex'));// xiaohong's keys:var hong = crypto.createDiffieHellman(prime, generator);var hong_keys = hong.generateKeys();// exchange and generate secret:var ming_secret = ming.computeSecret(hong_keys);var hong_secret = hong.computeSecret(ming_keys);//Secret of Xiao Ming: 4237157ab4c9211f78ffdb67d127d749cec91780d594b81a7e75f1fb591fecb84f33ae6591e1edda4bc9685b503010fe8f9928c6ed69e4ff9fdb44adb9ba1539console.log('Secret of Xiao Ming: ' + ming_secret.toString('hex'));//Secret of Xiao Hong: 4237157ab4c9211f78ffdb67d127d749cec91780d594b81a7e75f1fb591fecb84f33ae6591e1edda4bc9685b503010fe8f9928c6ed69e4ff9fdb44adb9ba1539console.log('Secret of Xiao Hong: ' + hong_secret.toString('hex'))
[注意]每次输出都不一样,因为素数的选择是随机的。
위 내용은 nodeJS의 암호화폐 암호화 방식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











2024년 마지막 분기에 암호화폐 세계에 기대감이 고조되면서 투자자들은 놀라운 수익을 제공할 수 있는 잠재력을 지닌 디지털 자산을 찾고 있습니다. 성공적인 암호화 수치에서 얻은 통찰력은 특정 토큰이 만료될 수 있음을 나타냅니다.

Gate.io는 사용자가 설치 패키지를 다운로드하여 장치에 설치하여 사용할 수있는 인기있는 cryptocurrency 교환입니다. 설치 패키지를 얻는 단계는 다음과 같습니다. Gate.io의 공식 웹 사이트를 방문하고 "다운로드"를 클릭하고 해당 운영 체제 (Windows, Mac 또는 Linux)를 선택하고 컴퓨터에 설치 패키지를 다운로드하십시오. 설치 중에 항 바이러스 소프트웨어 또는 방화벽을 일시적으로 비활성화하여 원활한 설치를 보장하는 것이 좋습니다. 완료 후 사용자는 GATE.IO 계정을 만들려면 사용을 시작해야합니다.

Cobie로 더 널리 알려진 Jordan Fish는 11월 8일 금요일에 Pump.fun을 통해 발행된 Solana(SOL) 밈 코인 공급량의 60%를 소각했습니다.

통화 서클의 상위 10 개 거래소는 거래량으로 순위가 매겨집니다. Binance Ouyihuobi ftxkrakencoinbasegeminibitfinexbybitgate.io.

상위 10 개의 가상 통화 거래 앱 순위 : 1. OKX, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. 플랫폼을 선택할 때 보안, 유동성, 처리 비용, 통화 선택, 사용자 인터페이스 및 고객 지원을 고려해야합니다.

디지털 자산 공간에서 비트 코인은 기대가 높은 암호 화폐로서 거래에 대한 수요가 증가하고 있습니다. 이 기사는 세계 10 대 비트 코인 트레이딩 플랫폼을 탐색하고 포괄적 인 순위 목록을 제공하며 독자가 거래 요구에 가장 적합한 플랫폼을 선택하도록 도와줍니다.

세계 최고의 암호 화폐 거래 플랫폼 중 하나 인 Ouyi Exchange는 사용자에게 안전하고 안정적인 디지털 자산 거래 서비스를 제공합니다. 공식 포털 연결은 플랫폼에 직접 액세스하여 자산 관리, 거래 및 투자를 편리하고 효율적으로 만들 수 있습니다. Ouyi는 고급 기술 및 위험 관리 조치를 채택함으로써 안전하고 안정적인 거래 환경을 조성하여 사용자가 자신감을 가지고 거래하고 디지털 자산 세계의 편의성과 이점을 누릴 수 있도록 노력하고 있습니다.

2025 : 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi Global, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Mexc Global. 이 플랫폼은 거래량, 사용자 경험, 보안 및 통화 풍부함으로 인해 최고로 선정되었습니다.
