我正在使用JavaScript库forge.js(https://github.com/digitalbazaar/forge)
rsa publicKey如果长度为896位允许我加密文本的一部分,但是,publicKey的自身长度太长,不能满足我的需要。
如果我把它缩短到460位的密钥,那么密钥的长度几乎可以,但是,我只能加密一小段。
我喜欢RSA(加密/解密和签名/验证)的功能,但我不喜欢自己的密钥长度和大小限制。
是否有其他形式的加密更适合我的使用?
需要:
一个大约20个字符的公钥
能够加密约140个字符
与RSA相同或相似的功能
我一直在玩伪造的AES,但看起来加密是一种共享的东西 - 你有一把钥匙(共享?)。然后你可以创建一个密码和decypher。但我不知道这会如何与rsa类似;使用rsa我可以分享我的publicKey并且可以安全地签名和解密,但我不知道如何通过我目前对aes的理解来做同样的事情。
我目前如何选择:
//make sure that what user has said both hasn't been tampered with and is for you
var kp=forge.pki.rsa.generateKeyPair({bits: 896,e:0x10001});
var m=['Hi!'];
m[1]=kp.privateKey.sign(forge.md.sha1.create().update(m[0],'utf8'));
console.log(m);
console.log(kp.publicKey.verify(forge.md.sha1.create().update(m[0],'utf8').digest().bytes(),m[1]));
var asked='did you read this?';
var ask=kp.publicKey.encrypt(asked);
var read=kp.privateKey.decrypt(ask);
var r=['yes!'];
console.log('yes?');
r[1]=kp.privateKey.sign(forge.md.sha1.create().update(r[0],'utf8'));
r[2]=kp.privateKey.sign(forge.md.sha1.create().update(read,'utf8'));
console.log(kp.publicKey.verify(forge.md.sha1.create().update(asked,'utf8').digest().bytes(),r[2]));
注意:您需要在生产中使用try{}catch(e){}
进行解密和验证,只需填写我们为不同用户设置的邮件publicKey。
到目前为止,我可以基本上加密和解密,但我不明白如何将这种形式的cyrptography变成我习惯的方式
//encypher the letter i then decypher it
var aes=forge.pkcs5.pbkdf2('k9','kr',1000,32);
var ci=forge.cipher.createCipher('AES-CBC',aes);
ci.start({'iv':'k5'});
ci.update(forge.util.createBuffer('i','utf8'));
ci.finish();
console.log(ci.output.toHex());
var ci=forge.cipher.createDecipher('AES-CBC',aes);
ci.start({'iv':'k5'});
ci.update(forge.util.createBuffer(forge.util.hexToBytes('7276131d61a323c37b5e451c3acc983e')));
ci.finish();
ci.output.toString('utf8')
//7276131d61a323c37b5e451c3acc983e
//"i"
// k9 kr k5 might as well just be me mashing the keyboard with my head btw