Tag: sjcl

如何使用Elliptic Curves Diffie-Hellman和JS中的SJCL以及Ruby中的OpenSSL

使用Elliptic-Curves Diffie-Hellman,我想在客户端上连接SLCL – JS (文档) ,在服务器上连接OpenSSL – Ruby (文档) 。 我在这里发现了一个类似的问题,但它没有得到真正的回答,而且它也不是我真正想要的,因为它使用的是sjcl.ecc.elGamal.generateKeys(384, 10)而我希望使用sjcl.ecc.curves[‘c384’] < – NIST 尽管如此,我仍然使用和修改他的代码进行测试,因为我在使用sjcl.ecc.curves[‘c384’]生成单个公共点密钥时遇到了问题,这就是我想出来的。 //Javascript keypair = sjcl.ecc.elGamal.generateKeys(384, 10); console.log(keypair.pub._point.toBits()); //Changed from his serialize() 这输出到 [-1992414123, 638637875, 1917312913, 73389700, -425224557, 743777818, 970253455, 723842951, -1751664279, 982132367, -1949786746, 1067402923, -869929568, 157928816, 1651634060, 1968161300, -216192372, -1858642177, -1345910998, -2128793177, -1325754797, 143080818, 1868787479, -484135391] 使用输出ruby: #Ruby pointArr = […]

使用JS中的SJCL和Ruby中的OpenSSL进行椭圆曲线加密

我正在开发一个Web应用程序,它必须能够在服务器端使用ECC加密数据并在浏览器中解密。 我发现在JS中唯一可以使用的库是SJCL。 但是,由于目前SJCL中的ECC支持似乎有点放弃,我使用了fork ,它具有关键的序列化支持和演示 ,以便于理解。 首先,我在JS中生成一个ECC密钥对: keypair = sjcl.ecc.elGamal.generateKeys(384, 10); document.writeln(JSON.stringify(keypair.pub.serialize())); 这输出类似于: {“point”:[1110230655,241884220,775655552,-849225963,-883815628,-1984298210,-736346431,1387519594,-1810604283,-1235638489,1333314084,-1219216530,614640565,-1148742381,1038670260,1013716131,758346573,1162278003,1232401864,-1948620456,533899535,-1478577959,1853846180,-1553049184],”curve”:384} 然后我尝试将此公钥转换为OpenSSL可理解的格式。 ar = [1110230655,241884220,775655552,-849225963,-883815628,-1984298210,-736346431,1387519594,-1810604283,-1235638489,1333314084,-1219216530,614640565,-1148742381,1038670260,1013716131,758346573,1162278003,1232401864,-1948620456,533899535,-1478577959,1853846180,-1553049184] # ugly bit magic to somehow convert the above array into a proper byte array (in form of a string) kstr = [(ar.map { |i| (i>=0)?(‘0’*(8-i.to_s(16).length)+i.to_s(16)):(“%08X” % (2**32-1+i+1)) }*”).upcase].pack(“H*”) # opening a public key generated with the openssl […]

在ruby中使用sjcl.js创建的AES解密

嗨,假设客户端有一个密钥不通过与加密数据相同的通道传输。 我想要完成的是在ruby中解密Stanford Javascript Crypto Library(sjcl)的结果。 或者用于具有支持AES的加密库的任何其他语言的泛化。 这是我在javascript中所做的事情: sjcl.encrypt(‘stack-password’, ‘overflow-secret’) 这就是我得到的回报: { “iv”: “Tbn0mZxQcroWnq4g/Pm+Gg”, “v”: 1, “iter”: 1000, “ks”: 128, “ts”: 64, “mode”: “ccm”, “adata”: “”, “cipher”: “aes”, “salt”: “pMQh7m9Scds”, “ct”: “H6JRpgSdEzKUw2qEO1+HwIzAdxGTgh0” } 所以我实际要问的是,我需要哪些参数(假设服务器已经有“stack-password”密钥)才能解密秘密服务器端,我应该使用哪个库? 可能有AES解密库是不够的?