java php rsa加密解密_Java & PHP RSA 互通密钥、签名、验签、加密、解密

本文详细介绍了如何在Java和PHP之间使用RSA算法进行公钥、私钥的生成,以及加密、解密和签名验证的操作。通过提供的代码示例,展示了在两种语言中实现RSA加解密和签名的互通过程。
摘要由CSDN通过智能技术生成

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。

RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

11842135.html###thio47-1-png###

版本

语言

版本

PHP

7.3.11

Java

1.8.0_231

密钥生成

PHP

RSAUtils::resetGenKeyPair

public static function resetGenKeyPair()

{

$config = array(

"private_key_bits" => self::PRIVATE_KEY_BITS,

"private_key_type" => self::KEY_ALGORITHM,

);

$openssl = openssl_pkey_new($config);

openssl_pkey_export($openssl, $privateKey);

$publicKey = openssl_pkey_get_details($openssl);

$publicKey = $publicKey["key"];

return [

'publicKey' => $publicKey,

'privateKey' => $privateKey,

'publicKeyStr' => self::key2str($publicKey),

'privateKeyStr' => self::key2str($privateKey)

];

}

Java

RSAUtils.resetGenKeyPair

static Map resetGenKeyPair() throws Exception {

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);

keyPairGen.initialize(1024);

KeyPair keyPair = keyPairGen.generateKeyPair();

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

Map keyMap = new HashMap(2);

keyMap.put(PUBLIC_KEY, publicKey);

keyMap.put(PRIVATE_KEY, privateKey);

return keyMap;

}

签名

私钥加签。

有时签名可能会因为数据编码不同而导致不一致,所以要求 PHP 和 Java 都对数据进行编码处理。

PHP

RSAUtils::sign

public static function sign($dataStr, $privateKey)

{

$dataStr = self::str2utf8($dataStr);

$privateKeyId = openssl_get_privatekey($privateKey);

openssl_sign($dataStr, $s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值