使用nodeJS和Objective-C的非对称公钥/私钥加密RSA

使用nodeJS和Objective-C的非对称公钥/私钥加密RSA,objective-c,node.js,encryption,rsa,encryption-asymmetric,Objective C,Node.js,Encryption,Rsa,Encryption Asymmetric,我想使用非对称加密(RSA)加密我的服务器(用nodeJS编写)和iOS应用程序(用objective-C编写)之间的通信 我想做的是只加密我从iOS应用程序(使用公钥)发送到服务器的数据,服务器需要解密数据(使用私钥),以便读取数据 出于测试目的,使用GitHub中的以下库,我能够使用objective-C成功加密并解密字符串“hello world!”。注意:NSString*encWithPubKey是加密的base64字符串 使用以下链接,出于测试目的,我还能够使用nodeJs加

我想使用非对称加密(RSA)加密我的服务器(用nodeJS编写)和iOS应用程序(用objective-C编写)之间的通信

我想做的是只加密我从iOS应用程序(使用公钥)发送到服务器的数据,服务器需要解密数据(使用私钥),以便读取数据

出于测试目的,使用GitHub中的以下库,我能够使用objective-C成功加密并解密字符串“hello world!”。注意:NSString*encWithPubKey是加密的base64字符串

使用以下链接,出于测试目的,我还能够使用nodeJs加密然后解密字符串“helloworld!”:

以下两个示例都成功地打印了“hello world!”。接下来,我从objective-C(base64格式)中获取加密字符串,NSString*encWithPubKey,然后尝试使用nodeJS对其进行解密:

    var privkeyAlice = ursa.createPrivateKey(fs.readFileSync("/PATH/private.pem"));

    var enc = <  HERE IS THE ENCRYPTED STRING RECEIVED FROM Objective-C : encWithPubKey  >
    var rcv = privkeyAlice.decrypt(enc, 'base64', 'utf8');
    console.log('decrypted', rcv, '\n');

我试着上网,但找不到足够的资源来解决这个问题。任何帮助都将不胜感激!谢谢大家!

不要。加密两个系统之间通信的正确解决方案是使用TLS。尝试自己实现加密几乎肯定不会有好的结果,最终会导致密码被破坏——安全地实现加密非常困难,甚至连经验丰富的密码学家都会尽可能避免加密

在与作者进一步讨论了IRC上的这个问题,并确定反对使用TLS的理由是“客户端可以加载自定义CA并截获具有类似打嗝的请求”之后:

阻止客户端修改是不可能的。客户端基本上是不可信的,从技术上讲,无法确保客户端不篡改请求。相反,请求的验证应该在服务器端进行,这样无论客户端进行何种篡改都无关紧要。更多细节。

感谢好奇的程序员,我从以下链接找到了答案:

我现在需要节点rsa,而不仅仅是rsa。我的代码是这样的:

    myDecrypter.setOptions({encryptionScheme: 'pkcs1'});
其中myDecrypter是私钥

    var privkeyAlice = ursa.createPrivateKey(fs.readFileSync("/PATH/private.pem"));

    var enc = <  HERE IS THE ENCRYPTED STRING RECEIVED FROM Objective-C : encWithPubKey  >
    var rcv = privkeyAlice.decrypt(enc, 'base64', 'utf8');
    console.log('decrypted', rcv, '\n');
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI2bvVLVYrb4B0raZgFP60VXY
cvRmk9q56QiTmEm9HXlSPq1zyhyPQHGti5FokYJMzNcKm0bwL1q6ioJuD4EFI56D
a+70XdRz1CjQPQE3yXrXXVvOsmq9LsdxTFWsVBTehdCmrapKZVVx6PKl7myh0cfX
QmyveT/eqyZK1gYjvQIDAQAB
-----END PUBLIC KEY-----


-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMMjZu9UtVitvgHS
tpmAU/rRVdhy9GaT2rnpCJOYSb0deVI+rXPKHI9Aca2LkWiRgkzM1wqbRvAvWrqK
gm4PgQUjnoNr7vRd1HPUKNA9ATfJetddW86yar0ux3FMVaxUFN6F0KatqkplVXHo
8qXubKHRx9dCbK95P96rJkrWBiO9AgMBAAECgYBO1UKEdYg9pxMX0XSLVtiWf3Na
2jX6Ksk2Sfp5BhDkIcAdhcy09nXLOZGzNqsrv30QYcCOPGTQK5FPwx0mMYVBRAdo
OLYp7NzxW/File//169O3ZFpkZ7MF0I2oQcNGTpMCUpaY6xMmxqN22INgi8SHp3w
VU+2bRMLDXEc/MOmAQJBAP+Sv6JdkrY+7WGuQN5O5PjsB15lOGcr4vcfz4vAQ/uy
EGYZh6IO2Eu0lW6sw2x6uRg0c6hMiFEJcO89qlH/B10CQQDDdtGrzXWVG457vA27
kpduDpM6BQWTX6wYV9zRlcYYMFHwAQkE0BTvIYde2il6DKGyzokgI6zQyhgtRJ1x
L6fhAkB9NvvW4/uWeLw7CHHVuVersZBmqjb5LWJU62v3L2rfbT1lmIqAVr+YT9CK
2fAhPPtkpYYo5d4/vd1sCY1iAQ4tAkEAm2yPrJzjMn2G/ry57rzRzKGqUChOFrGs
lm7HF6CQtAs4HC+2jC0peDyg97th37rLmPLB9txnPl50ewpkZuwOAQJBAM/eJnFw
F5QAcL4CYDbfBKocx82VX/pFXng50T7FODiWbbL4UnxICE0UBFInNNiWJxNEb6jL
5xd0pcy9O2DOeso=
-----END PRIVATE KEY-----
    myDecrypter.setOptions({encryptionScheme: 'pkcs1'});