标签: sjcl

好斯坦福Javascript加密库(SJCL)的例子?(JS加密)

我正在寻找一种在Javascript中进行客户端加密的方法(记住http://www.matasano.com/articles/javascript-cryptography/)并找到了SJCL.但我似乎找不到好的代码示例.有什么指针吗?

javascript cryptography sjcl

25
推荐指数
2
解决办法
2万
查看次数

Ruby中的SJCL AES-128-CCM解密

我正在尝试在Ruby中实现aes-128-ccm加密字符串的SJCL解密.在阅读了类似的问题之后,我看到这应该在较新版本的OpenSSL库中得到支持,所以我已经将开发版本从github安装到/ opt

执行此操作后,当我运行/ opt/bin/openssl密码时,我在列表中看不到aes-128-ccm密码:

ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DH-RSA-AES256-SHA256:DH-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DH-RSA-AES256-SHA:DH-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:DH-RSA-CAMELLIA256-SHA:DH-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DH-RSA-DES-CBC3-SHA:DH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DH-DSS-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DH-RSA-AES128-SHA256:DH-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DH-RSA-AES128-SHA:DH-DSS-AES128-SHA:DHE-RSA-SEED-SHA:DHE-DSS-SEED-SHA:DH-RSA-SEED-SHA:DH-DSS-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:DH-RSA-CAMELLIA128-SHA:DH-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-SHA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DH-RSA-DES-CBC-SHA:DH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DH-RSA-DES-CBC-SHA:EXP-DH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5
Run Code Online (Sandbox Code Playgroud)

但如果我运行/ opt/bin/openssl enc -help 2>&1我看到"-aes-128-ccm":

-aes-128-cbc               -aes-128-ccm               -aes-128-cfb              
-aes-128-cfb1              -aes-128-cfb8              -aes-128-ctr              
-aes-128-ecb               -aes-128-gcm               -aes-128-ofb              
-aes-128-xts               -aes-192-cbc               -aes-192-ccm              
-aes-192-cfb               -aes-192-cfb1              -aes-192-cfb8             
-aes-192-ctr               -aes-192-ecb               -aes-192-gcm              
-aes-192-ofb               -aes-256-cbc               -aes-256-ccm              
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8             
-aes-256-ctr               -aes-256-ecb               -aes-256-gcm              
-aes-256-ofb               -aes-256-xts               -aes128                   
-aes192                    -aes256                    -bf                       
-bf-cbc                    -bf-cfb                    -bf-ecb                   
-bf-ofb                    -blowfish                  -camellia-128-cbc         
-camellia-128-cfb          -camellia-128-cfb1         -camellia-128-cfb8        
-camellia-128-ecb          -camellia-128-ofb          -camellia-192-cbc         
-camellia-192-cfb          -camellia-192-cfb1         -camellia-192-cfb8        
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc         
-camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8        
-camellia-256-ecb          -camellia-256-ofb          -camellia128              
-camellia192               -camellia256               -cast                     
-cast-cbc                  -cast5-cbc                 -cast5-cfb                
-cast5-ecb                 -cast5-ofb                 -des                      
-des-cbc                   -des-cfb …
Run Code Online (Sandbox Code Playgroud)

ruby encryption openssl aes sjcl

9
推荐指数
1
解决办法
1278
查看次数

使用SJCL获取sha256哈希的十六进制表示

所述SJCL文档提供以下代码作为SHA256一个例子:

var bitArray = sjcl.hash.sha256.hash("message");  
var digest_sha256 = sjcl.codec.hex.fromBits(bitArray);  
Run Code Online (Sandbox Code Playgroud)

当我期待一个16个字符的十六进制字符串(256位= 16个十六进制字符)时,该示例中的摘要等于64个字符的十六进制字符串.我错过了什么?如何获得16个字符的哈希摘要?

javascript hex sjcl

8
推荐指数
1
解决办法
5625
查看次数

如何在SJCL中实现公钥/私钥加密?

我使用Stanford Javascript Crypto Library(SJCL)进行对称AES加密(基于其演示页面上的示例).但是,我还需要生成密钥对,使用公钥加密数据,并使用私钥解密数据.一些类名表明这可能在SJCL中有可能,但我想知道是否有人可以帮助一个如何完成它的例子.我不关心这个阶段的私钥存储,只是内存生成和使用公钥/私钥对.

如果不可能,我会对有关AES和公钥加密的替代库的建议感兴趣 - 但我知道这是我可以自己研究的东西!所以主要是我很想知道我开始使用的库是否可以满足我的所有需求,或者我是否需要寻找替代方案.

javascript cryptography rsa aes sjcl

8
推荐指数
2
解决办法
3584
查看次数

使用PHP AES CCM模式解密意外的结果

我正在尝试使用AES-256-CCM重现加密操作,该操作目前在Java中与Bouncy Castle提供商一起执行.当使用openssl在PHP中尝试相同的操作时,我找不到一组产生相同输出的参数.

由于最近将AEAD模式添加到PHP(7.1)中,因此文档的工作原理很少.

Java中"工作"加密的最小示例如下所示:

    public static void main(String args[]) {
    try {
        java.security.Security.addProvider(new BouncyCastleProvider());
        byte[] key = Base64.decodeBase64("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=".getBytes());
        byte[] iv = Base64.decodeBase64("rcFcdcgZ3Q/A+uHW".getBytes());

        SecretKey aesKey = new SecretKeySpec(key, 0, key.length, "AES");
        Cipher aesCipher = Cipher.getInstance("AES/CCM/NoPadding", "BC");
        aesCipher.init(1, aesKey, new IvParameterSpec(iv));

        byte[] encrypted = aesCipher.doFinal("test".getBytes());
        System.out.println(Hex.encodeHex(encrypted));

        // Output: 411d89ff74205c106d8d85a8
    }
    catch (Throwable e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我试图使用不同的两个不同的库和语言重新生成它时,我已经将键和iv设置为已知值.

当尝试使用PHP和openssl重新生成它时,我正在尝试使用以下代码

$key = base64_decode("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=");
$iv = base64_decode('rcFcdcgZ3Q/A+uHW');
$data = 'test';
$tag = null;

$encrypted = openssl_encrypt($data,'aes-256-ccm', $key,OPENSSL_RAW_DATA, $iv, $tag,"",8);
echo(bin2hex($encrypted . $tag));
// d1a7403799b8c37240f36edb …
Run Code Online (Sandbox Code Playgroud)

php encryption bouncycastle sjcl php-openssl

8
推荐指数
1
解决办法
296
查看次数

使用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()));
Run Code Online (Sandbox Code Playgroud)

这输出如下:

{"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}
Run Code Online (Sandbox Code Playgroud)

然后我尝试将此公钥转换为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 cli tool showed a structure like this:
algokey = OpenSSL::ASN1::ObjectId 'id-ecPublicKey'
algovalue = OpenSSL::ASN1::ObjectId 'secp384r1'
algo = OpenSSL::ASN1::Sequence.new [algokey,algovalue]
# for some reason OpenSSL seems …
Run Code Online (Sandbox Code Playgroud)

javascript ruby openssl cryptography sjcl

7
推荐指数
1
解决办法
3369
查看次数

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

嗨,假设客户端有一个密钥不通过与加密数据相同的通道传输.

我想要完成的是在ruby中解密Stanford Javascript Crypto Library(sjcl)的结果.或者用于具有支持AES的加密库的任何其他语言的泛化.

这是我在javascript中所做的:

sjcl.encrypt('stack-password', 'overflow-secret')
Run Code Online (Sandbox Code Playgroud)

这就是我得到的回报:

{
  "iv": "Tbn0mZxQcroWnq4g/Pm+Gg",
  "v": 1,
  "iter": 1000,
  "ks": 128,
  "ts": 64,
  "mode": "ccm",
  "adata": "",
  "cipher": "aes",
  "salt": "pMQh7m9Scds",
  "ct": "H6JRpgSdEzKUw2qEO1+HwIzAdxGTgh0"
}
Run Code Online (Sandbox Code Playgroud)

所以我实际要问的是,我需要哪些参数(假设服务器已经有"stack-password"密钥)以便解密秘密服务器端,我应该使用哪个库?可能有AES解密库是不够的?

javascript ruby encryption aes sjcl

6
推荐指数
2
解决办法
2566
查看次数

Google电子表格:使用Google Apps脚本加密单元格内容

我有一个谷歌电子表格,并希望加密几个单元格的内容(我不关心使用哪种加密方法,只要有一个等效的iOS解密方法).

遗憾的是,Google Apps脚本中没有内置加密功能.

出于这个原因,我想使用像Crypto-JSsjcl这样的开源Javascript库.

如何在Google Apps脚本中使用其中一个库?

在Google Apps脚本文档中,我没有找到任何关于如何在我的Google Apps脚本中使用外部JavaScript库的线索.

javascript google-sheets google-apps-script sjcl cryptojs

6
推荐指数
1
解决办法
8225
查看次数

基准测试WebCrypto比第三方库慢得多?

我正在评估WebCrypto性能与第三方加密库SJCLForge的比较.我希望WebCrypto 更快,因为它是本机浏览器实现.这也已经过基准测试并且已经显示出来.

我使用Benchmark.js实现了以下测试来测试密钥派生(PBKDF2-SHA256),加密(AES-CBC)和解密(AES-CBC).这些测试显示web加密速度明显慢于SJCL和Forge加密/解密.

基准代码

请看这里的小提琴:https://jsfiddle.net/kspearrin/1Lzvpzkz/

var iterations = 5000;
var keySize = 256;

sjcl.beware['CBC mode is dangerous because it doesn\'t protect message integrity.']();

// =========================================================
// Precomputed enc values for decrypt benchmarks
// =========================================================

var encIv = 'FX7Y3pYmcLIQt6WrKc62jA==';
var encCt = 'EDlxtzpEOfGIAIa8PkCQmA==';

// =========================================================
// Precomputed keys for benchmarks
// =========================================================

function sjclMakeKey() {
  return sjcl.misc.pbkdf2('mypassword', 'a salt', iterations, keySize, null);
}

var sjclKey = sjclMakeKey();

function forgeMakeKey() …
Run Code Online (Sandbox Code Playgroud)

javascript encryption sjcl benchmark.js webcrypto-api

6
推荐指数
1
解决办法
1096
查看次数

如何使用Stanford PRNG生成随机字符串?

我需要在用户浏览器中生成一个安全的50个字符的随机字符串.

看看sjcl.prng到目前为止我有这个:

$(document).ready(function () {

    sjcl.random = new sjcl.prng(8);

    sjcl.random.startCollectors();

    $("body").on('mousemove', function() {
        console.log(sjcl.random.getProgress(8));

        if(sjcl.random.isReady(8) === 2) {
            sjcl.random.stopCollectors();
            console.log(sjcl.random.randomWords(5,8));
        }
    });

});
Run Code Online (Sandbox Code Playgroud)

将鼠标移动一段时间后,我得到一个像这样的字节数组:[-579285364, 1099191484, 94979086, -1572161987, -570940948].

但我正在寻找的是一个50个字符的字母数字字符串.我对这个主题的了解有限,我在这里寻求帮助.

javascript random prng sjcl

5
推荐指数
2
解决办法
1127
查看次数