美文网首页
nodejs中使用公私钥加密以及生成公私钥

nodejs中使用公私钥加密以及生成公私钥

作者: 时间里的小恶魔 | 来源:发表于2019-04-14 19:18 被阅读0次
var crypto = require("crypto");
const padding = crypto.constants.RSA_PKCS1_PADDING;
const NodeRSA = require("node-rsa");
const fs = require("fs");

module.exports = {
  //data的参数类型为buffer
  MD5Hash: function(data, callback) {
    //计算该文件的md5值
    var fsHash = crypto.createHash("md5");
    fsHash.update(data);
    var md5 = fsHash.digest("hex");
    console.log("文件的MD5是:%s", md5);
    callback(md5);
  },
  //使用私钥解密
  Decrypt: function(privateKeyPath, EnDataStr, callback) {
    fs.exists(privateKeyPath, function(exists) {
      if (exists) {
        var pem = fs.readFileSync(privateKeyPath, "utf8");
        var key = new NodeRSA(pem);
        var decrypted = key.decrypt(EnDataStr, "utf8");
        console.log("decrypted:" + decrypted);
        callback(decrypted);
      }
    });
  },

  //使用公钥加密
  Encrypt: function(publicKeyPath, dataStr, callback) {
    fs.exists(publicKeyPath, function(exists) {
      if (exists) {
        var pem = fs.readFileSync(publicKeyPath, "utf8");
        var key = new NodeRSA(pem);
        encrypted = key.encrypt(dataStr, "base64");
        console.log("encrypted:" + encrypted);

        callback(encrypted);
      }
    });
  },
  //生成公钥和私钥
  Generator: function generator(publicPemPath, privatePemPath) {
    // const publicKeyPath = "./pem/public.pem";
    // const privateKeyPath = "./pem/private.pem";
    var key = new NodeRSA({ b: 512 });
    key.setOptions({ encryptionScheme: "pkcs1" });

    const publicKey = key.exportKey("public");
    fs.writeFile(publicPemPath, publicKey, err => {
      if (err) throw err;
      console.log("公钥已保存");
    });
    const privateKey = key.exportKey("private");
    fs.writeFile(privatePemPath, privateKey, err => {
      if (err) throw err;
      console.log("私钥已保存");
    });
  },
  //使用私钥签名
  SignData: function SignData(privateKeyPath, dataStr, callback) {
    fs.exists(privateKeyPath, function(exists) {
      if (exists) {
        var pem = fs.readFileSync(privateKeyPath, "utf8");
        var key = new NodeRSA(pem);
        signOut = key.sign(dataStr, "base64");
        console.log("=====signOut=======" + signOut);
        callback(signOut);
      }
    });
  },
  //验证签名
  VerySign: function VerySign(publicKeyPath, dataStr, signStr, callback) {
    fs.exists(publicKeyPath, function(exists) {
      if (exists) {
        var pem = fs.readFileSync(publicKeyPath, "utf8");
        var key = new NodeRSA(pem);
        var verifySign = key.verify(
          Buffer.from(dataStr),
          signStr,
          "base64",
          "base64"
        );
        console.log("------verifySign------" + verifySign);
        callback(verifySign);
      }
    });
  },

  SelfSign: function SelfSign(attrs, savePath) {
    var selfsigned = require("selfsigned");
    // var attrs = [
    //   { name: "commonName", value: "contoso.com", card: "130521199203080776" }
    // ];
    var pems = selfsigned.generate(attrs, { days: 365 });
    console.log(pems);
    var privateCert = pems.private;
    var publicCert = pems.public;
    var cert = pems.cert;
    this.SaveData(privateCert, "private.pem", savePath);
    this.SaveData(publicCert, "public.pem", savePath);
    this.SaveData(cert, "cert.pem", savePath);
    console.log("----private-------" + pems.private);
  },
  SaveData: function SaveData(data, fileName, filePath) {
    fs.writeFile(
      filePath + "/" + fileName,
      data,
      { flag: "w", encoding: "utf-8", mode: "0666" },
      function(err) {
        if (err) {
          console.log("文件写入失败");
        } else {
          console.log("文件写入成功");
        }
      }
    );
  }
};

相关文章

  • openssl终端命令RSA和DES加解密

    RSA 1、生成公钥和私钥 2、加密解密文件 公钥加密私钥解密 私钥加密公钥解密 3、在程序中使用依次生成 csr...

  • 非对称加密算法

    使用非对称加密加密算法生成一对公钥和私钥, 可以使用公钥加密明文然后私钥解密,也可以使用私钥加密然后公钥进行解密....

  • RSA非对称加密算法

    RSA算法,经典非对称加密算法,通过生成公钥 私钥 进行加密解密 公钥加密 私钥解密 反之 私钥加密 公钥...

  • python的加密方式: rsa加密和解密

    RSA加密是一种非对称加密,通常使用公钥加密,私钥解密。 公钥、私钥的生成 生成文件如下图: 可以将生成的公钥、私...

  • python实现rsa加密解密

    生成rsa加密解密所使用的公钥私钥 生成私钥:openssl genrsa -out rsaprivatekey....

  • HTTPS及非对称加密

    非对称加密:公钥加密,只有私钥能解密。私钥加密,只有公钥能解密。A首先生成一对公钥和私钥,然后将公钥公开给别人加密...

  • ios RSA加密

    后台给的公钥,私钥,不管是公钥加密私钥解密还是私钥加密公钥解密都是可以的,但是Mac 通过openssl生成的公钥...

  • iOS RSA 加密解密

    前言 后台给的公钥,私钥,不管是公钥加密私钥解密还是私钥加密公钥解密都是可以的,但是Mac 通过openssl生成...

  • 苹果应用签名原理

    公钥和私钥 加密:公钥加密,私钥解密 签名:私钥加密,公钥解密 公私钥是一对,谁都可以加密和解密,具体看使用场景加...

  • RSA公私钥生成

    ·1.创建加密密钥 ·2.通过私钥生成公钥 ·测试加密解密·创建txt文件 ··私钥加密->公钥解密 ··公钥加密...

网友评论

      本文标题:nodejs中使用公私钥加密以及生成公私钥

      本文链接:https://www.haomeiwen.com/subject/dwiswqtx.html