Tag: aes

无法使用Java解密AES-256 GCM

我有一个节点模块,可以使用AES-256 GCM进行encryption和解密。 现在我也试图用Java解密,无论节点模块encryption了什么,但是我总是收到AEADBadTagException。 我已经testing了自己的节点模块,并可以确认它是否按预期工作。 我知道Java假设authentication标签是消息的最后一部分,所以我确保标签是附加在节点模块中的最后一个东西。 现在我只是用“你好”这个词来testing。 这是来自节点的encryption消息: Q10blKuyyYozaRf0RVYW7bave8mT5wrJzSdURQQa3lEqEQtgYM3ss825YpCQ70A7hpq5ECPafAxdLMSIBZCxzGbv/Cj4i6W4JCJXuS107rUy0tAAQVQQA2ZhbrQ0gNV9QA== 盐现在还没有真正被使用,因为我试图保持简单的testing目的 节点模块: var crypto = require('crypto'); var encrypt = function(masterkey, plainText) { // random initialization vector var iv = crypto.randomBytes(12); // random salt var salt = crypto.randomBytes(64); var key = masterkey; // AES 256 GCM Mode var cipher = crypto.createCipheriv('aes-256-gcm', key, iv); // encrypt the given text […]

Node.js:错误的密码输出

当解密hex编码的AES128输出时,Node.js奇怪地给了我错误的输出。 function decrypt_data( data, key, iv ) { var dc = crypto.createDecipheriv( 'aes-128-cbc', hex_to_str(key), hex_to_str(iv) ); var res = dc.update( data, 'hex', 'utf8' ); res += dc.final( 'utf8' ); console.log(res); return res; } 这个function似乎完全没问题,所有的testing都通过了。 但是当我从真正的节点服务器调用它时,它会返回损坏的输出。 消息的尾巴是好的,但前32个符号是完整的垃圾。 像这样的东西: 8 ro & AMD Accelerated Parallel Processing" : [ "Cayman", "Cayman", "AMD Phenom(tm) II X2 555 Processor" ] […]

为什么节点AES128密码的输出长度为32字节?

这是我的代码: var crypto = require('crypto') function aese (key) { return crypto.createCipher('aes128', key) } var x1 = crypto.randomBytes(16) var y1 = crypto.randomBytes(16) var a = aese(y1) a.write(x1) a.end() var ct = a.read() console.log(ct.length); //should be 16 but is 32

使用phpseclib使用AES进行encryption,并使用CryptoJS进行解密

我想在CBC模式下使用phpseclib AESencryptionstring(库的默认值): $cipher = new Crypt_AES(); $cipher->setKey('abcdefghijklmnop'); $cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); $cipher->encrypt("hello world") 然后,我需要使用CryptoJS或类似的解密nodejs ..我已经尝试了不同的库,但没有运气到目前为止。 我想这个问题是有关的编码输出不同,从每个库。 有没有人有一个如何实现这个互操作性场景的工作示例? 其他库如Crypto可以使用。 一个示例Base64输出是MF9lCR4DaW1R0adIe03VEw== 所以这个想法是解密如下: var helloWorld = CryptoJS.AES.decrypt("MF9lCR4DaW1R0adIe03VEw==", key).toString();

使用vb.net AES / CBCencryptionstring,并需要使用JavaScript CryptoJS进行解密

我有一个vb.net Windows窗体应用程序,将stringencryption到文件。 我现在需要JavaScript来解密这个值。 我试图使用CryptoJS,但我正在努力与语法,以及如何获得在CryptoJS.PBKDF2(假设是正确的使用)使用正确的格式密码,盐和初始化向量。 调用方法 Dim encryptedComplianceValue = encrypt2(complianceValue, "Password", "Salt Value", "SHA1", 2, "@1B2c3D4e5F6g7H8", 256) encryption方法 Public Function encrypt2(ByVal plainText As String, ByVal passPhrase As String, ByVal saltValue As String, ByVal hashAlgorithm As String, ByVal passwordIterations As Integer, ByVal initVector As String, ByVal keySize As Integer) As String Dim initVectorBytes As Byte() initVectorBytes = […]

尝试使用crypto-js和nodejs进行解密

我在一个微控制器和一个nodejs tcp服务器之间来回传递。 微控制器与传感器数据形成一个json串。 微控制器然后将jsonstring发送到WiFi模块。 然后WiFi模块使用32位hex字符的AES256作为密钥encryption数据,然后将encryption数据发送到nodejs tcp服务器。 nodejs TCP服务器正在使用googlecode Crypto-JS的Crypto-JS模块forms。 出于testing目的,我想输出encryption的数据和解密的数据到控制台。 但是我不确定如何做到这一点。 我试图输出数据,但我收到空白的数据。 例如,控制台应该读取类似于:192.168.1.14:30001> some-json-string除了我正在接收192.168.1.14:30001> 旧代码: // I removed the old code to shrink this post and to remove any confusion. 编辑 我现在正在使用由NodeJS提供的内置encryption模块。 我收到的错误是: crypto.js:292 var ret = this._binding.final(); ^ TypeError:错误:06065064:数字包络例程:EVP_DecryptFinal_ex:错误的解密 在Decipher.Cipher.final(crypto.js:292:27) 解密(C:\ Users \ joes \ Desktop \ encrypt \ tcp.js:18:24) 在sockets。 (C:\用户\乔斯\桌面\encryption\ tcp.js:44:23) 在Socket.emit(events.js:95:17) […]

为什么node.js的encryption模块给出的结果与Java的AESencryption的Cipher类不同?

我试图理解为什么使用Java或Node.jsencryption它时encryption数据发生了变化,我需要修改node.js代码以使它返回与我在Java上相同的encryption数据。 (请注意,我不能修改java片段) Node.js实现: var crypto = require('crypto'); console.log("\n\n============"); var cKey = new Buffer("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "utf-8"); var cIv = new Buffer("1111111111111111", "utf-8"); var cData = "x"; console.log(cKey); console.log(cIv); console.log("UTF-8 Data: " + cData); var cipher = crypto.createCipheriv("aes-256-cbc", cKey, cIv); var cipherText = cipher.update(cData, 'utf8', 'hex') + cipher.final('hex'); console.log("Our data: " + cipherText); 以前的代码将打印出以下结果: <Buffer 41 41 41 […]

如何在NodeJS中使用aes-256-ecb正确encryptionstring并使用OpenSSL的命令行解密?

我正在尝试使用aes-256-ecb密码通过node.js的内置encryption库encryption长UTF-8编码的string。 波纹pipe是我在Node.js(v0.10.24)中写入testing的encryption代码,以及OpenSSL(OpenSSL 1.0.1 14 Mar 2012)命令行的相应输出和解密命令。 使用node.jsencryption var crypto = require('crypto'); var cipher = crypto.createCipher('aes-256-ecb','password'); var plaintext = [ 'this is a very long long long long long long', 'long long long long long long long long long', 'long long long long long long string!!!!!!!!' ].join('') console.log(cipher.update(plaintext,'utf8', 'base64') + cipher.final('base64')) 产量 XBnU6WZ9wr2GdA1YWZVhsG+mHQ0xlXXc8rAFEud6I/PqfFZL6Pdit7Sm8v+ViKNZmhgTzi7zfg8GHKFntkCDuj6F54TDaWKAdJRftLP9I+22jiKRvYtpD4SDV2oIy93MM5IMbSoBRvXayNF8H9FQnhACM5MHhHX1pLiR4yCg/l6iHH2BDLrwCSifGcGCaQYx 解密使用OpenSSL echo -n […]

Node.js Crypto AES密码

出于某种奇怪的原因,Node的内置Cipher和Decipher类没有按预期工作。 该文档指出cipher.update “返回encryption的内容,并且在stream式传输时可以使用新数据多次调用。” 该文件还声明cipher.final “返回任何剩余的encryption内容。” 但是,在我的testing中,您必须调用cipher.final来获取所有数据,从而使Cipher对象变得毫无价值,并且要处理下一个块,您必须创build一个新的Cipher对象。 var secret = crypto.randomBytes(16) , source = crypto.randomBytes(8) , cipher = crypto.createCipher("aes128", secret) , decipher = crypto.createDecipher("aes128", secret); var step = cipher.update(source); var end = decipher.update(step); assert.strictEqual(source.toString('binary'), end); // should not fail, but does 请注意,这发生在使用crypto.createCipher或crypto.createCipheriv ,秘密作为初始化向量。 解决办法是用下列内容replace第6行和第7行: var step = cipher.update(source) + cipher.final(); var end = decipher.update(step) + decipher.final(); […]

Node.js aes128encryption/解密端口到PHP

所以在node.js我有一个encryptionscheme使用aes128而不通过IV。 一个例子如下 var cipher = require('crypto').createCipher('aes128','password'); cipher.update('test','utf8','base64')+cipher.final('base64'); 输出CjZ3R/tW8jiyLvg+/TE6bA== 。 问题是,我不能在PHP中重现这一点,即使我已经尝试了一堆实现和变化。 当我然后尝试通过openssl运行这个,我运行以下: echo "test" | openssl enc -e -aes128 -a -k password 输出U2FsdGVkX19Ccfv3SWvuzuZWeov9GDuwx1RMK2HWa / s =也不匹配。 我也尝试使用-md和所有可能的选项,并且两者都不匹配(它们甚至不是相同的块大小)。 在PHP中运行时,我尝试过使用填充(padding)对填充字符进行散列操作(填充字符是所需填充字符的数目)(在网上看到这是nodejs使用的内容)。 我已经尝试将IV设置为密码,也尝试将空字节,但我仍然无法获得匹配。 任何build议/想法? 编辑: 所以我刚刚在php中发现了函数openssl_encrypt,并尝试了相同的testing,并再次得到了一个完全不同的输出(现在这个输出与node.js完全相同,据说它们都使用openssl): openssl_encrypt ( "test" , 'aes128' , "password") 哪些输出(已经在base64中) JleA91MvYHdEdnj3KYHmog==这是至less现在在块计数匹配,但仍然不是相同的密文。 我还应该提到的是,将IV传递给nodejs是一种select,可以解决这个差异,但是这个phpscheme将取代已经存在的nodejs中的旧scheme,所以它必须能够解密已经创build的密文