前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >密码学术语以及nodejs实现

密码学术语以及nodejs实现

作者头像
MrTreasure
发布2018-05-10 11:23:14
1.1K0
发布2018-05-10 11:23:14
举报
文章被收录于专栏:不止是前端

基础准备工作

代码语言:javascript
复制
const secret = 'Sunshine'
const salt = 'Treasure'
const plainText = '始终相信美好的事情即将发生'
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7ikxFcifEdVZ7IxSvd65vUQKx
xvYZRx+qSz0Cl1Xj+PwyT9hnw4M6rglvbjgpQhQnnumY/KkmI7CCglXVNjOI9zRA
/IfSv3juPTEFItJUcnfOtgnzDgrzMvu9gP9nH45aD5mnZd+zWaK9BSJSuOk/D6rj
Lts8Iykv1jpQ/KYFPwIDAQAB
-----END PUBLIC KEY-----`
const privateKey = `-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC7ikxFcifEdVZ7IxSvd65vUQKxxvYZRx+qSz0Cl1Xj+PwyT9hn
w4M6rglvbjgpQhQnnumY/KkmI7CCglXVNjOI9zRA/IfSv3juPTEFItJUcnfOtgnz
DgrzMvu9gP9nH45aD5mnZd+zWaK9BSJSuOk/D6rjLts8Iykv1jpQ/KYFPwIDAQAB
AoGAQdV0nNRL/X0rVKKl+krLIyyPA5VSguEizocG7cfuUM7wyUCaOSK7CHhbu5A3
itQ1ewsf+aKIRmk05zuVofka8ZkOxfdpMgNlP1nuYD6VQHbm6ssPiZP64EX1W64G
djNnOhZjP1dR/JhEMB8tWZDdQOhwHMiTCWGMZZYXtC7aUdECQQDz05OZM2eTZkeu
5srHLVDLWrNTn6yZCnD4PA7ltyuR2uF3K/dziWaCPT6J8dblOnBKJteU0fvMiDPx
iT8KyM7LAkEAxOdPHQ6+k9s/25tpmEXibJytJ8T1HsIxFAdvuHqurjMnb3yOg2F+
0s2fBnH42nvYnJmCA2TDv39G9EczHvKA3QJAAnaCqSuBwlVoJ/Yg2j408Ljr0s5s
GeenGHrS07Mz93c0i9Wf3ETpCivAM/iDaTFb7QPTbadpWbmOfMQcJOm+XQJAMKzh
wNQpRpHXqmkz5GG6RJFCuOcWlWD6EvJ3qsohLo0UvZmz/UR3vpL4MfawxwoAlU3Z
dw9M2KUVHEQRnh/ivQJAD+U1zCsmP6J3+gWZ/lzGE+8CrfxhjywSTtEAsC1GhAA8
BnaJUPhgGM9r9N52NWb/WuhT1PgLZSlW0OhBX1/xJg==
-----END RSA PRIVATE KEY-----`

对称密码 一种用相同的密钥进行加密和解密的技术,用于确保消息的机密性。在对称密码的算法方面,目前主要使用的是 AES。经管对称密码能够确保消息的机密性,但需要解决将解密密钥配送给接收者的密钥配送问题

代码语言:javascript
复制
  test('对称密码', () => {
    //TODO 没有通过测试,报错 error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt 
    const cipher = crypto.createCipher('aes192', secret)
    cipher.update(Buffer.from(plainText))
    const cipherText = cipher.final()
    const deCipher = crypto.createDecipher('aes192', secret)
    deCipher.update(cipherText)
    const temp = deCipher.final()
    expect(temp).toBe(Buffer.from(plainText))
  })

公钥密码 一种用不同的密钥进行加密和解密的技术,和对称密码一样用于确保消息的机密性。使用最广泛的算法是 RSA,除此之外还有 ElGamal 和 Robin 等算法,以及与其相关的Diffie-Hellman 密钥交换和椭圆曲线 Diffie-Hellman 密钥交换等技术。和对称密码相比,公钥密码的速度非常之慢,因此一般都会和对称密码一起组成混合密码系统来使用。公钥密码能够解决对称密码中的密钥交换问题,但存在通过中间人攻击被伪装的风险,因此需要对带有数字签名的公钥进行认证

代码语言:javascript
复制
  test('公钥密码', () => {
    const publicText = crypto.publicEncrypt(publicKey, Buffer.from(plainText))
    const privateText = crypto.privateDecrypt(privateKey, publicText)
    expect(privateText.toString()).toBe(plainText)
  })

单向散列函数 一种将长消息转换为短散列值的技术,用于确保信息的完整性。在单向散列函数的算法方面,SHA-1 曾被广泛使用,但由于人们已经发现了一些针对该算法的理论上可行的攻击方式,因此该算法不再被用于新的用途。今后我们应该主要使用的算法包括目前已经在广泛使用的 SHA-2,以及具有全新结构的SHA-3算法。单向散列函数可以单独使用,也可以用作消息认证码、数字签名以及伪随机数生成器等技术的组成元素来使用

代码语言:javascript
复制
  test('单向散列函数', async () => {
    const hash = crypto.createHash('sha256')
    // 一般对公钥进行散列
    hash.update(publicKey)
    const hex = hash.digest('hex')
    expect(hex).not.toBeNull()
  })

消息认证码 一种能够识别通信对象发送的消息是否被篡改的认证技术,用于验证消息的完整性,以及对消息进行认证。消息认证码的算法中,最常用的是利用单向散列函数的 HMAC。HMAC 的构成不依赖于某一种具体的单向散列函数算法。消息认证码能够对通信对象进行认证,但无法对第三方进行认证。此外,它也无法防止否认。消息认证码也可以用来实现认证加密。

代码语言:javascript
复制
  test('消息认证码', () => {
    const hmac = crypto.createHmac('sha256', salt)
    hmac.update(plainText)
    const msg = hmac.digest('hex')
    expect(msg).not.toBeNull()
  })

数字签名 是一种能够对第三方进行信息认证,并能够防止通信对象做出否认的认证技术。数字签名的算法包括RSA、ElGamal、DSA、椭圆曲线DSA、爱德华兹曲线DSA等。公钥基础设施 PKI 中使用的证书,就是对公钥加上认证机构的数字签名所构成的。要验证公钥的数字签名,需要通过某种途径获取认证机构的自身的合法公钥。

代码语言:javascript
复制
  test('数字签名', () => {
    const sign = crypto.createSign('RSA-SHA256')
    const signature = sign.sign(privateKey)
    const verify = crypto.createVerify('RSA-SHA256')
    expect(verify.verify(publicKey, signature)).toBeTruthy()
  })

伪随机数生成器 一种能够生成具备不可预测性的比特序列的技术,由密码和单向散列函数等技术构成。伪随机数生成器用于生成密钥、初始化向量和 nonce 等

代码语言:javascript
复制
  test('伪随机数生成器', () => {
    const random = crypto.randomBytes(256).toString('hex')
    console.log(random)
    expect(random.length).toBe(512)
  })

完整代码

github 欢迎star

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础准备工作
  • 完整代码
相关产品与服务
全站加速网络
全站加速网络(Enterprise Content Delivery Network,以下简称 ECDN)为您提供稳定高效的网络加速服务,适用于动静混合、纯动态、跨国、上传等多种加速场景。ECDN 网络资源丰富,同时融合静态缓存、智能路由、协议优化、多路传输、抗抖动等自研技术,加速效果更加显著;接入便捷,功能配置灵活多样,可满足您个性化的业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档