nodejs 实现钉钉ISV接入的加密解密方法

这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流

解密方法

exports.decryptMsg = function (text) {
 var aes_msg_buffer = new Buffer(text, 'base64');
 var key = new Buffer(aes_key + "=", 'base64');
 var iv = key.slice(0, 16);
 var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
 var dec = decipher.write(aes_msg_buffer);
 dec = decipher.read();
 var msg_leng_buffer = dec.slice(16, 20);
 var msg_length = msg_leng_buffer.readInt32BE();
 var rand_buffer = dec.slice(20, 20 + msg_length);
 var msg = rand_buffer.toString("utf-8");
 var result = JSON.parse(msg);
 return result;
};

加密方法

exports.encrypt_text = function (text, aes_key, suiteKey) {
 var key = new Buffer(aes_key + "=", 'base64');
 var iv = key.slice(0, 16);
 var random_buffer = new Buffer(exports.getRandomStr(16), 'utf-8');
 var buffer = new Buffer(text, 'utf-8');
 var length_buffer = new Buffer(4);
 length_buffer.writeUInt32BE(buffer.length, 0);
 var corpidBytes = new Buffer(suiteKey, 'utf-8');
 var newBuffer = Buffer.concat([random_buffer, length_buffer, buffer, corpidBytes]);
 var cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
 //cipher.write(newBuffer);
 //var dec = cipher.read();
 var cipheredMsg = Buffer.concat([cipher.update(/*encoded*/newBuffer), cipher.final()]);
 return cipheredMsg.toString('base64');
};

签名方法

var arr =[token, timestamp, nonce, res_encrypt] //token 是配置钉钉套件的token,timestamp时间戳, nonce随机字符串, res_encrypt是上面加密后的结果
exports.signature_arr = function (arr) {
 arr.sort();
 var str = "";
 for (var i = 0; i < arr.length; i++) {
  str += arr[i];
 }
 var sha1 = crypto.createHash('sha1');
 sha1.update(str);
 var msg_signature = sha1.digest('hex');
 return msg_signature;
};

以上所述是小编给大家介绍的nodejs 实现钉钉ISV接入的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • nodejs开发微信小程序实现密码加密

    微信小程序开发--实现密码加密具体步骤: 在utils中的util.js 文件中增加 函数 实现 字符串转换为16进制加密后的字符串: function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s.charCodeAt(i)) < 0x80) r.push(c); else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x

  • NodeJS实现客户端js加密

    思路: 服务端渲染业务代码js => 前后端约定加密算法 => 业务代码进行签名 => 客户端解密业务代码 => eval 执行 Node 路由示例: /** * 请自定义 restful API 这里以 GET 为例 * @param {req} * @param {res} * @return {next()} */ //var util = require('utility'); exports.encryption = function(req, res){ //GET v

  • nodejs加密Crypto的实例代码

    加密技术通常分为两大类:"对称式"和"非对称式". 对称式加密: 就是加密和解密使用同一个密钥,通常称之为"Session Key "这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的"对称式"加密法,它的Session Key长度为56bits. 非对称式加密: 就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用

  • 使用node.js对音视频文件加密的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: fs.readFile('./downsuccess/'+name+'', {flag: 'r+', encoding: ''}, function (err, data) { console.log('读取中') if(err) { return; } let b = new Buffer(data); let c = b.toString('hex'); let cipherBuffer = _this.cipher(data); fs.

  • 详解nodejs与javascript中的aes加密

    一.简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.高级加密标准已然成为对称密钥加密中最流行的算法之一. 2.AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特:而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限.包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB. 3.在

  • nodejs 实现钉钉ISV接入的加密解密方法

    这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流 解密方法 exports.decryptMsg = function (text) { var aes_msg_buffer = new Buffer(text, 'base64'); var key = new Buffer(aes_key + "=", 'base64'); var iv = key.slice(0, 16); var decipher = crypto.createD

  • php结合md5实现的加密解密方法

    本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实php手册里面就有,改一改就行了.在此贴一下,用这算法要加载一个php模块mcrypt,不然用不了. //加密 function string2secret($str) { $key = "123"; $td = mcrypt_module_open(MCRYPT_DES,'','ecb',

  • python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优化 1. desstruct.py DES加密中要使用的结构体 ip= (58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32,

  • python中base64加密解密方法实例分析

    本文实例讲述了python中base64加密解密方法.分享给大家供大家参考.具体分析如下: 一.base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示.它可用来作为电子邮件的传输编码.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同.编码后的

  • Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安装PyCrypto,可以用AES和DES.我使用DES加解密.加密后将密文转为16进制,在入库.测试代码如下. ; html-script: false ]#!/bin/python #-*- coding:utf-8 -*- # Filename: # Revision: # Date: 2013

  • Javascript实现base64的加密解密方法示例

    这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值.如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致.于是准备使用通用的base64加密解密. base64 加密解密 下方是base64用javascript写出来的函数和方法. //1.加密解密方法使用: //1.加密 var str = '124中文内容'; var base = new Base64(); var result = base.enco

  • php实现基于openssl的加密解密方法

    本文实例讲述了php实现基于openssl的加密解密方法.分享给大家供大家参考,具体如下: 通过openssl加密解密方法 1. openssl加密方法: function encrypt($id){ $id=serialize($id); $key="1112121212121212121212"; $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16)); $data['value']=openssl_encrypt($

  • C#字符串加密解密方法实例

    本文实例讲述了C#字符串加密解密方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: #region 加密解密 static string encryptKey= "Oyea"; #region 加密字符串 public static string Encrypt(string str) /// <summary> /// 加密字符串 /// </summary> /// <param name="str">要加密的字符串

  • C#开发中常用的加密解密方法汇总

    相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法: 常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5,SHAD等 一.MD5消息摘要算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是message-digest algorithm 5,简单的说就是单向的加密,也就是说无法根据密文推导出明文. MD5主要用途: 1.对一段信息生成信息摘要,该摘要对该信息具有唯一

  • 六种php加密解密方法实例讲解

    代码演示如下: 方法一 <?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $en

随机推荐