PHP RSA加密参考
<?php
class XRsas
{
protected $public_key;
protected $public_key_sign;
protected $private_key;
protected $private_key_sgin;
protected $key_len;
public function __construct( )
{
$this->public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAWsfxlxw429+9ZpvVrhpHRuQF
3FQKVg4ruECx49fT2vYzPnrfvPQ1G/yvJBKAmsGVoA8xEOLqZs3Mvl4rDi0QQOM4
DEWcB5AIzV2/hkuF8ooihyiMJqr7Kq1zPbGgxVR9G6mq+PzGL9OkzS4CfA/2UTZx
6ibgRLZ7WXY/YFTZJwIDAQAB
-----END PUBLIC KEY-----';
$this->private_key = '-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMBax/GXHDjb371m
m9WuGkdG5AXcVApWDiu4QLHj19Pa9jM+et+89DUb/K8kEoCawZWgDzEQ4upmzcy+
XisOLRBA4zgMRZwHkAjNXb+GS4XyiiKHKIwmqvsqrXM9saDFVH0bqar4/MYv06TN
LgJ8D/ZRNnHqJuBEtntZdj9gVNknAgMBAAECgYEAmV/JTblPp4aqQDswxpCsI2lD
J+kmmZdEdVfVPgKOdT6CURngn8Xqcu597Ki2mBTNhqC5fEYaqQyPzFF+hJYpFwmY
y22A53tXPD2Z+SeIOM6AwjKEjpKnIaY6ko9YmHsrfACWnvyIE4697/K0hRmGU6lR
PPVz2FOYgItbTq167QECQQDwtUEnqiSVOKhr1BgJVQTsERuRM5Ca0p2qn5Bamhdo
nBhncHoI89ZJw+tua8JAYUdBk8wIIUTxINjP4muys3R7AkEAzJMh+RVUCSg7IA6j
P4DtZYFBBtrMFsp4Zgyq326A9OvbKRSChO281nSwMjcVDbGZCX9YQCgHJUGCYZ9M
0NscRQJBAKrCKsKUtPcXBoPYJmUYZzGAwWm0hvUOTMNqBuH/RnPzqGxZInmPYYla
732Z/GfnmsEutCNgVqQohSaUnYpcPFkCQQCamjb6ftvbb8P/HhDRVSYTp/L0szW5
o5oJxVj9Mg3TCsu95/oba29iwxzFVkta5fS58LtJAPcleLSIAlOTI4PhAkBzyuwh
YBBVyIauF6MIk6b4bJc1SKuGa+25As6vTp9QQfupMuWlPmPr9nduGNAZeohfNWPl
NByIAYSFAyYyv8iq
-----END PRIVATE KEY-----';
$this->public_key_sign = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsM3EAkOkufMjk/P4aDo+5RJAq
g2VhR1+nvDI8J8wH0NfeNauVOJxypD6wpvXcQ8gRNQ0dnPY1A4JYfGlQGFNDvbsy
aZxC6U6+76hwbgFrWg5Wkmr0LEmjRe6JkjjcCL8zrgZNgxW/EAEXodUjiTx/YEnr
0ZmcB3gSjTC7OSlnfQIDAQAB
-----END PUBLIC KEY-----';
$this->private_key_sign = '-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKwzcQCQ6S58yOT8
/hoOj7lEkCqDZWFHX6e8MjwnzAfQ1941q5U4nHKkPrCm9dxDyBE1DR2c9jUDglh8
aVAYU0O9uzJpnELpTr7vqHBuAWtaDlaSavQsSaNF7omSONwIvzOuBk2DFb8QAReh
1SOJPH9gSevRmZwHeBKNMLs5KWd9AgMBAAECgYBXJx3tLGpoFc3TX1v3siD5ooLY
kXHw/x+hlDVUjsvLtN5cX4t81Y8Q0qHL5GSQ21lZpCEEONm/UQxaXnUqjXUuAar9
mVMOJo94HzJro5K/3LgYaAP4KlCYBWIKMgqxrexDHFHpgWcHmnBEtm9s2I+e9pCN
Td7+VVlM+sDcrr6d3QJBAOJQnDmMi7FKE7Vagon3lQYrefMOgqVfwwTZJVU20kH0
6dI6Lvnc3peuke7nKG2ySb9Dk9gu8gqypbvXTEGnsocCQQDCyb+H6TD1ZiKFQA2w
brtfZOUA4iw3ezRL15DFVS3efCyCk5X+WtoFljlM3XRR1S+xQHodnKzm9ICtB4ir
xGLbAkEAjhAR8SIjclfQxU+aj+alWmkiNQvPwOW68qkogTRXieWmfTvezyPxan+/
xZq/SxTWrERMYzEc6NA5rw84JCKTswJBAIFlpGaU8oESqDv8oRtjc/WbAMXleZoh
rkvzl6h/PUlfE/JqOGoP0GWFterp8iuqg1QskPK68eE664AGUTRJ8aECQQCoxNN3
sxNGgdY+fE49aI8BgtNy293Oy9HIYZhnQx+ElhKTvpfhnjk2Vmp3aTNu7x3uKCQs
lvoIcdNOZXVzhFU+
-----END PRIVATE KEY-----';
$pub_id = openssl_get_publickey($this->public_key);
$this->key_len = openssl_pkey_get_details($pub_id)['bits'];
}
public function publicEncrypt($data)
{
$encrypted = '';
$part_len = $this->key_len / 8 - 11;
$parts = str_split($data, $part_len);
foreach ($parts as $part) {
$encrypted_temp = '';
openssl_public_encrypt($part, $encrypted_temp,$this->public_key,OPENSSL_PKCS1_PADDING);
$encrypted .= $encrypted_temp;
}
return base64_encode($encrypted);
}
public function privateDecrypt($encrypted)
{
$decrypted = "";
$part_len = $this->key_len / 8;
$base64_decoded = base64_decode($encrypted);
$parts = str_split($base64_decoded, $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_private_decrypt($part, $decrypted_temp,$this->private_key,OPENSSL_PKCS1_PADDING);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}
public function privateEncrypt($data)
{
$encrypted = '';
$part_len = $this->key_len / 8 - 11;
$parts = str_split($data, $part_len);
foreach ($parts as $part) {
$encrypted_temp = '';
openssl_private_encrypt($part, $encrypted_temp, $this->private_key,OPENSSL_PKCS1_PADDING);
$encrypted .= $encrypted_temp;
}
return base64_encode($encrypted);
}
public function publicDecrypt($encrypted)
{
$decrypted = "";
$part_len = $this->key_len / 8;
$base64_decoded = base64_decode($encrypted);
$parts = str_split($base64_decoded, $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_public_decrypt($part, $decrypted_temp,$this->public_key,OPENSSL_PKCS1_PADDING);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}
public function sign($data)
{
openssl_sign($data, $sign, $this->private_key_sign, OPENSSL_ALGO_SHA256);
return base64_encode($sign);
}
public function verify($data, $sign)
{
$result = FALSE;
$pub_id = openssl_get_publickey($this->public_key_sign);
$result = openssl_verify($data, base64_decode($sign),$pub_id , OPENSSL_ALGO_SHA256);
return $result;
}
}
node-rsa 加密解密参考
const NodeRSA = require('node-rsa');
var key = new NodeRSA();
key.setOptions({ encryptionScheme: 'pkcs1' });
var encryData = key.encryptPrivate('要加密的数据', 'base64', 'utf8');
var decryptData = key.decryptPublic(encryData, 'utf8');
var publicKey = new NodeRSA();
publicKey.importKey(publicPem, 'pkcs8-public-pem');
var decrypted = publicKey.decryptPublic(encryData, 'utf8');
privateKey.importKey('私钥', 'pkcs8-private-pem');
var signedData = privateKey.sign(Buffer.from('要签名的数据'), 'base64' ).toString('base64');
var result = publicKey.verify(Buffer.from('要验证的签名数据'), signedData, 'Buffer', 'base64');
}