【问题标题】:Encrypt string in JavaScript and decrypt in PHP with RSA technique [duplicate]使用 RSA 技术在 JavaScript 中加密字符串并在 PHP 中解密 [重复]
【发布时间】:2013-12-13 23:15:47
【问题描述】:

我正在尝试加密 JavaScript 中的一些文本,然后将其发送到 PHP(等:使用 Ajax)以在那里解密并保存(等:在 MySQL 中)。

到目前为止,这是我的代码:

在 JavaScript 中:

我正在使用这个库进行加密: http://travistidwell.com/blog/2013/02/15/a-better-library-for-javascript-asymmetrical-rsa-encryption/

function ConvertToURL(data) {
    // Converts data to URL friendly form
    // etc: Replaces '+', '/', '=' with 'plus', 'slash', 'equal'
};
function AjaxOrder(data) {
    // Sends data in PHP with Ajax
};

var publicKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----';

var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
var encrypted = encrypt.encrypt('Text to send.');

AjaxOrder(ConvertToURL(encrypted));

在 PHP 中:

$dataPost = $_POST('dt');

function ConvertFromURL($data) {
    // Converts $data to original form
    // etc: Replaces 'plus', 'slash', 'equal' with '+', '/', '='
}
function ReturnData($data) {
    // Sends $data back in JavaScript as an answer to Ajax
}

$privateKey = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----';

openssl_private_decrypt(ConvertFromURL($dataPost), $decryptedWord, $privateKey);

ReturnData(base64_encode($decryptedWord));

现在 PHP 的答案每次都是空的。有什么想法可以完成这项工作吗?

感谢您的宝贵时间!

【问题讨论】:

标签: javascript php encryption cryptography php-openssl


【解决方案1】:

是的,

它在发挥作用之前为消息添加了一些“随机”填充。

【讨论】:

  • 是的,我就是这么认为的。但问题是如何实现两种语言之间的加密传输。有没有比 RSA 更好的方法?或者至少我可以停止随机过程以使两种语言进行交流?
  • 你不想停止随机数,因为这是加密的一部分。如果您使用您的私钥解密消息,如果您正确操作,它将返回原始消息。
  • 好的,所以这不是问题..但它仍然不起作用。
【解决方案2】:

也许尝试在ConvertFromURL($data) 函数中执行base64_decode

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2013-11-24
    • 2016-12-25
    • 2011-12-22
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多