我正在尝试使用javascript来编码AES-256-CBC和php mcrypt库来解码数据,反之亦然.
我知道javascript的问题本质以及任何人都看到密钥的事实,但我使用javascript作为非Web环境的脚本工具 - 所以不要担心它.
我找到了pidder https://sourceforge.net/projects/pidcrypt/
并使用演示页面加密了一些数据,然后尝试通过php解密它,但是出了点问题,我似乎无法找到什么......我使用相同的键,两端都是32字节的字符串
任何指针将不胜感激
~~~
$encrypted = "string after pidder encryption";
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_256,'',MCRYPT_MODE_CBC,'');
$iv_size = mcrypt_enc_get_iv_size($cipher);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = base64_decode($encrypted);
echo "after b64decode: " . $encrypted . "\n\n\n";
$encrypted = mdecrypt_generic($cipher, $encrypted);
echo "decrypt:" . $encrypted;
Run Code Online (Sandbox Code Playgroud)
~~~
我已经使用php,javascript和android应用程序使用库实现了RSA加密:
php侧的phpseclib
pidcrypt for javascript
bouncrycastle版本(bcprov-jdk14-151)用于anrdroid serviceprovider
我有我的加密机制,如:
user->request->publickey
->server->generate(publickey,privatekey) and save private key into Database
->server->sendpublickey->user
->user->encryptdata->send->server->decrypt
Run Code Online (Sandbox Code Playgroud)
但是这种机制在javascript和php加密和解密之间工作正常,但在服务器发送公钥时在android平台上.它无法解密公钥.
现在我为此测试了不同的场景
PHP KeyGenerating
$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);
define('CRYPT_RSA_EXPONENT', 65537);
extract($rsa->createKey(1024));
Run Code Online (Sandbox Code Playgroud)
PHP DecryptingCode
$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
$rsa->loadKey($pri);
$binaryCiphertext=base64_decode($encrypted);
$strBase64DecryptedData=$rsa->decrypt($binaryCiphertext);
$plaintText = base64_decode($strBase64DecryptedData);
Run Code Online (Sandbox Code Playgroud)
就像我的公钥一样.
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBALrBdN8F83hT2+pBsAwiNx+v3FWp51IdEElE8UvVhfZYmePbitpzLcJi
jZ4/tvRFXJGhqa3PKPUQkH2F4VrHruA2kNceiL/Btywc9oM+tDMeX1jcRKwXwK1k
KdccKwn0qywG6YxQuqWQIotOfV+IIuhcHdaHBl6CZ05/cBo6AlMlAgMBAAE=
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
从服务器和服务器请求密钥生成公钥和私钥,并将公钥MODULUS和EXPONENT发送到Android应用程序并应用此代码:
RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(mod,exp);
KeyFactory keyFactory = KeyFactory.getInstance("RSA","BS");
PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);
Cipher cipher …Run Code Online (Sandbox Code Playgroud)pidcrypt ×2
aes ×1
android ×1
bouncycastle ×1
encryption ×1
javascript ×1
php ×1
phpseclib ×1
rsa ×1