- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 javascript 实现中对协议(protocol)进行逆向工程,但我被困在 AES 加密方法上。我正在用 C++ 和 Crypto++ 库对此进行编程。它使用 SJCL 库,并调用 ciphertext = (new sjcl.cipher.aes(key)).encrypt(plaintext)
。从 SJCL 文档中,我可以看出这是一个低级接口(interface)。 ciphertext
、key
和plaintext
都是 32 位整数的 4 元素数组。据我所知,并且可以在谷歌上找到,Crypto++ 只提供高级接口(interface)。有没有办法让 Crypto++ 做 SJCL 正在做的事情?另外,encrypt
方法到底做了什么?
http://bitwiseshiftleft.github.com/sjcl/doc/symbols/sjcl.cipher.aes.html
编辑:我注意到 javascript 代码将 plantext
从字符串转换为整数,我想我尝试了改变每个变量的字节序的每一种组合。无论如何,我尝试了所有有意义的组合。我还尝试创建 int32_t
的数组,并使用输入到那行 javascript 中的内容初始化它们。这是我现在得到的:
void crypto()
{
SecByteBlock key(16);
int32_t plain[4] = { 0x93C467E3, 0x7DB0C7A4, 0xD1BE3F81, 0x0152CB56 }, cipher[4];
int32_t* keyBuf = (int32_t*) key.BytePtr();
keyBuf[0] = 1885434739;
keyBuf[1] = 2003792484;
keyBuf[2] = 0;
keyBuf[3] = 0;
cout << "plain = [" << plain[0] << ", " << plain[1] << ", " << plain[2] << ", " << plain[3] << "]\n";
cout << "key = [" << keyBuf[0] << ", " << keyBuf[1] << ", " << keyBuf[2] << ", " << keyBuf[3] << "]\n";
ECB_Mode<AES>::Encryption e;
e.SetKey(key, key.size());
StringSource((const byte*) plain, 16, true, new StreamTransformationFilter( e, new ArraySink((byte*)cipher, 16) ) );
cout << "cipher = [" << cipher[0] << ", " << cipher[1] << ", " << cipher[2] << ", " << cipher[3] << "]\n";
}
function crypto()
{
var key = [1885434739, 2003792484, 1885434739, 2003792484];
var plain = [0x93C467E3,0x7DB0C7A4,0xD1BE3F81,0x0152CB56];
console.log("plain = "+plain);
console.log("key = "+key);
var cipher = (new sjcl.cipher.aes(key)).encrypt(plain);
console.log("cipher = "+cipher);
}
这是 C++ 版本的输出:
plain = [2479122403, 2108737444, 3518906241, 22203222]
key = [1885434739, 2003792484, 1885434739, 2003792484]
cipher = [3437909595, 1341853431, 2532744872, 2416113380]
和 JavaScript:
plain = 2479122403,2108737444,3518906241,22203222
key = 1885434739,2003792484,1885434739,2003792484
cipher = -1974659585,-1567997661,-1863224381,-318378846
最佳答案
是的,您应该使用整数作为字节数组的大端表示。所以最高字节应该在左边。然后你得到 128 位 AES 的 16 字节输入/输出。您可以在 ECB 模式下使用 Crypto++ 或其他更高级别的加密库来执行 block 加密/解密。
请注意,SJCL aes
类仅实现原语。它在 SJCL 中用作 ccm 之一的实现或 ocb2加密模式。这些模式反过来被便利库使用,但是 - 如果我没记错的话 - 那个直接使用 JSON 编码/解码,这对你来说可能有点过头了。
关于javascript - Crypto++ 低级 AES API(a la SJCL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543596/
我正在此处进行安装,但遇到了麻烦: https://github.com/bitwiseshiftleft/sjcl/blob/version-0.8/README/INSTALL npm insta
我正在尝试使用使用 SJCL 的 RNCryptor-JS,但出于某种原因,SJCL 位数组串联似乎不起作用。 var SALT_SIZE = 64/8; var plaintext = "Hello
使用使用SJCL的RNCryptor。我正在尝试解密十六进制消息,但是当使用 CBC 模式时,事情变得很奇怪。显然,在使用 CBC 时必须声明一个注意声明,但我收到了一个错误。 function Ke
我在使用 SJCL 和 javascript 加密文件时遇到问题。 我已经成功地使用 FileReader API 和 readAsBinaryString 加密了文本文件。当谈到加密 pdf/png
是否可以使用 sjcl 生成对称 key ?我想返回对称 key 而不是仅仅调用 sjcl.encrypt() 函数。如果可能,请提供代码示例。 最佳答案 这是它是如何完成的。const key =
我想使用斯坦福 Javascript 加密库 (SJCL) 通过给定的密码和 key 解密 AES,但我无法传递 key : var key = 'key'; var cipher = 'abjslö
我目前正在尝试 SJCL,但在加密/解密方面遇到问题。由于缺乏好的例子,我想出了您在下面看到的内容,但它不起作用。有人能指出我做错了什么吗?提前致谢。 var p = { "iv": "
我用过Stanford Javascript Crypto Library (SJCL)用于对称 AES 加密(基于其演示页面上的示例)。但是,我还有一个额外的要求,即生成 key 对,使用公钥加密数
我正在尝试使用 pycrypto 在 Python 中重写一些 JS(使用 SJCL 库)。我无法弄清楚如何实现以下代码 aes = new sjcl.cipher.aes( this.key );
使用 Sjcl我尝试编写一个小服务,从我的 javascript 应用程序发送和接收加密数据。 可悲的是,sjcl documentation缺少有关如何处理其 AES 加密数据的信息。他们的encr
我正在尝试使用 sjcl(斯坦福 Javascript 加密库)在我的 Titanium(目标:iOS 和 Android)项目中加密一些文本。我使用的是最简单的方法,没有其他选择: sjcl.enc
SJCL docs提供以下代码作为 sha256 的示例: var bitArray = sjcl.hash.sha256.hash("message"); var digest_sha256 =
我正在使用 SJCL ,它适用于小的 ASCII 字符串。 但是当我尝试解码 this piece of JSON (HTML 页面加密的结果)我得到一个 "this is not JSON!"错误。
我编写了一个 .html 文件来测试从另一个文件导入内容。文件结构如下所示: test(是一个文件夹) ㄴasdf.html ㄴlib(是一个文件夹) ---ㄴsjcl.js asdf.html 看起
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试解密一些已使用 SJCL(Stanford Javascript 加密库) 加密的信息。示例页面位于 http://bitwiseshiftleft.github.io/sjcl/demo/
我想在我的 GWT 项目(客户端)中使用外部加密库。 (特别是斯坦福 Javascript 加密库,http://crypto.stanford.edu/sjcl/我在项目的 gwt 配置文件 (My
我正在试验 Stanford Javascript Crypto Library (SJCL)并想要加密并稍后解密一个字符串。 下面的代码工作正常: var pw = "password"; var
我正在尝试从 javascript 实现中对协议(protocol)进行逆向工程,但我被困在 AES 加密方法上。我正在用 C++ 和 Crypto++ 库对此进行编程。它使用 SJCL 库,并调用
我正在使用 SJCL library 加密/解密消息。我的问题是我不知道使用的是 AES 还是 SHA256 这是我的代码: var h = sjcl.codec.hex, count = 2048
我是一名优秀的程序员,十分优秀!