Tag: encryption

从Node.jsencryption库获得奇怪的结果

我试图编写一个函数来recursion获取目录中所有文件的md5sum,但是每次运行时都会得到不同的结果,而不会修改任何文件。 代码我得到这些结果来自: var crypto = require('crypto'); var fs = require('fs'); var path = require('path'); function _deepMD5(dir, md5){ var files = fs.readdirSync(dir); for(var i = 0; i < files.length; i++){ var fp = dir+path.sep+files[i]; if(fs.lstatSync(fp).isDirectory()){ _deepMD5(fp, md5); } else{ var fh = fs.openSync(fp, 'r'); var chunkSize=1024; var buffer=new Buffer(chunkSize, 'binary'); while(fs.readSync(fh, buffer, 0, chunkSize, null) != […]

节点encryptionaes256-cbc 0x0填充的例子

从节点密码文件 : “你可以禁止自动填充input数据来阻塞大小,如果auto_padding为false,那么整个input数据的长度必须是密码块大小的倍数,否则final将会失败。非标准填充很有用,例如使用0x0而不是PKCS填充,你必须在cipher.final之前调用它。 哪一个都很好,但是,我无法在任何地方find合适的例子: 这是我的想法: function pad(str) { if((str.length*8)%256 != 0) { str+= "0"; pad(str); } } var str = "blah_blah_blah_blah_ asdf"; if(byteLength < 256) { for(i=byteLength;i<256;i+=8) { str += "0"; } } else if(byteLength > 256) { pad(str); } 现在这显然是不理想的,因为cipher.final()方法应该删除填充,但是它也不会,我也许应该填充它而不是字符。 此外,模数函数失败的string大于256 耸肩 什么是使用节点密码自定义填充(0x0)的正确方法?

.NET和nodejs之间的AESalgorithm值差异,CryptoJS

C#中的下面的AESalgorithm返回一个不同于节点js和CryptoJS返回的encryption值。 NodeJS Crypto库和CryptoJS返回相同的值,但是.NET的AesCryptoServiceProvider返回一个不同的值。 有任何想法吗? C#示例 private const string AesIV = @"!QAZ2WSX#EDC4RFV"; private const string AesKey = @"5TGB&YHN7UJM(IK<"; public static void Main() { try { string original = "HelloWorld"; Console.WriteLine(Encrypt(original)); } catch (Exception e) { Console.WriteLine("Error: {0}", e.Message); } } /// <summary> /// AES Encryption /// </summary> private static string Encrypt(string text) { // AesCryptoServiceProvider AesCryptoServiceProvider […]

Node.jsencryptioninput/输出types

我想弄清楚Node.jsencryption库,以及如何正确使用它适合我的情况。 我的目标是: 键入hexstring3132333435363738313233343536373831323334353637383132333435363738 在hexstring中的文本46303030303030303030303030303030 在hexstring中的encryption文本70ab7387a6a94098510bf0a6d972aabe 我正在通过ac 256的实现来testing这个,并通过一个网站http://www.hanewin.net/encrypt/aes/aes-test.htm 这是我迄今为止所做的,并不像我期望的那样工作。 我最好的猜测是input和输出types对于密码函数是不正确的。 唯一的作品是utf8,如果我使用hex,它失败了一个V8错误。 任何想法,我应该转换或改变,以使其工作。 var keytext = "3132333435363738313233343536373831323334353637383132333435363738"; var key = new Buffer(keytext, 'hex'); var crypto = require("crypto") var cipher = crypto.createCipher('aes-256-cbc',key,'hex'); var decipher = crypto.createDecipher('aes-256-cbc',key,'hex'); var text = "46303030303030303030303030303030"; var buff = new Buffer(text, 'hex'); console.log(buff) var crypted = cipher.update(buff,'hex','hex') 在这个例子中encryption输出是8cfdcda0a4ea07795945541e4d8c7e35这不是我所期望的。

如果node.js编译时没有使用openssl,可以在node.js上使用Socket.io吗?

我正在使用Express和Socket.io在embedded式sheeva主板(运行在busybox Linux上的node.js 0.10.12)上运行node.js项目。 由于这是embedded式的,所有东西都是用稀疏的选项构build的,没有安装encryption的东西(node.js被编译–without-openssl)。 该服务器将在局域网上使用,不会传输或接收任何敏感信息,因此不需要encryption。 当我用node运行这个脚本时: var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(3000); 节点失败,输出如下: tls.js:67 throw new Error('node.js not compiled with openssl crypto support.'); Error: node.js not compiled with openssl crypto support. at tls.js:67:9 at NativeModule.compile (node.js:892:5) at NativeModule.require (node.js:861:18) at https.js:22:11 at NativeModule.compile (node.js:892:5) at Function.NativeModule.require (node.js:861:18) at […]

node-rsa和openssl的兼容性

我有一套公钥/私钥,当使用encryption和解密两种方式中的一种对一些数据进行encryption/解密时,它是完美无瑕的。 我仍然没有试图用两者之一encryption数据,并用另一个解密。 示例schenario: a)我使用下面的node.js代码使用公钥创build一些encryption的数据: #!/usr/bin/env node var NodeRSA = require('node-rsa'); var fs = require('fs'); function createUsingPubKey(Pub, data) { var pk = new NodeRSA(); pk.importKey(Pub); encrypted = pk.encrypt(data, 'base64'); return encrypted; } var sampledata = "SECRET STUFF"; var genkey = createUsingPubKey(fs.readFileSync('id_rsa.pub'), sampledata) console.log(genkey); b)然后我尝试使用openssl实用程序解密它: node test.js | openssl base64 -d -A | openssl rsautl -inkey id_rsa […]

在nodejs中创buildRSA令牌

我正在尝试使用encryption对REST API进行身份validation。 首先,我需要调用API来获得一个encryptionKey和一个timestamp 。 encryptionKey采用Base 64格式。 然后我需要使用密钥创build一个RSAToken ,并使用password + "|" + timestamp最后encryption密码 password + "|" + timestamp 。 这是一些使用pythonvalidationAPI的示例代码 key, timestamp = get_encryption_key() decoded_key = key.decode('base64') rsa_key = RSA.importKey(decoded_key) encrypted = rsa_key.encrypt(password + '|' + str(timestamp), 'x') encrypted_password = encrypted[0] 和 import base64 from Crypto.PublicKey import RSA r = requests.get(my_url, headers=headers) myData = r.json() decoded […]

OpenSSL PHP到JavaScript(节点)

我正在转换encryption脚本从PHP到JavaScript,正在挣扎… node.js密码文档如下: crypto.createCipheriv(algorithm, key, iv) 使用给定的algorithm,密钥和iv创build并返回一个密码对象。 PHP openssl-encrypt文档 : string openssl_encrypt ( string $data , string $method , string $password [, bool $raw_output = false [, string $iv = "" ]] ) PHP使用密码和和iv 。 当没有使用 IV时节点只使用密码 ,否则你必须提供密钥和iv 。 当我同时使用密码和iv时,如何将我的PHP函数转换为节点。 我也不清楚究竟是什么关键代表…节点文档指出, 密钥和四是计算,如果只有一个密码提供..这是什么PHP? 如果是这样,当我提供一个密码和一个iv时,它会做什么? 它使用密码作为密钥吗?

validationMandrill的X-Mandrill-Signature

我正在开发一个Node.js应用程序,我正在努力validationMandrill Webhook请求。 正如这里所说的http://help.mandrill.com/entries/23704122-Authenticating-webhook-requests它应该是这样的PHP中的东西: /** * Generates a base64-encoded signature for a Mandrill webhook request. * @param string $webhook_key the webhook's authentication key * @param string $url the webhook url * @param array $params the request's POST parameters */ function generateSignature($webhook_key, $url, $params) { $signed_data = $url; ksort($params); foreach ($params as $key => $value) { $signed_data […]

尝试encryption时出错

当我试图从文本使用encryption(Node.JS)创build一个encryption的文本时,我得到一个“错误:必须给予密码types,键”。 代码如下。 var cipher = crypto.createCipher('aes-256-cbc', userId); var crypted = cipher.update(password, 'utf8', 'hex'); crypted += cipher.final('hex'); return crypted; 但是当我使用摩卡testing它时,并没有给出任何错误。 在这两个时间里,input都是正确的。 谁能帮我?