RSA公钥加解密、AES加解密

 jsencrypt 只能公钥加密私钥解密

//安装依赖
npm install jsencrypt --save

import JsEncrypt from "jsencrypt"; //rsa加密
//公钥加密
export function RSAencrypt(pas) {
	//实例化jsEncrypt对象
	let jse = new JsEncrypt();
	//设置公钥
	jse.setPublicKey(
		"-----BEGIN PUBLIC KEY-----\n" +
	
		"-----END PUBLIC KEY-----"
	);
	//加密
	return jse.encrypt(pas);
}

export function RSAdecrypt(pas) {
	let jse = new JsEncrypt();
	// jse.setPrivateKey(
	jse.setPublicKey(
		"-----BEGIN PUBLIC KEY-----\n" +
		

		"-----END PUBLIC KEY-----"
	);
	return jse.decrypt(pas);
}

node-rsa 实现RSA解密

npm install node-rsa --save

export function decrypt(txt) {
	//公钥解密
	let privateKey = "-----BEGIN PUBLIC KEY-----\n" +
		"-----END PUBLIC KEY-----"
	try {
		const nodersa2 = new NodeRSA(privateKey);
		const decrypted2 = nodersa2.decryptPublic(txt, "utf8");
		return decrypted2
	} catch (error) {
		return ''
	}
}

export const encrypt = (password) => {
	// 私钥加密
	//  '-----BEGIN PRIVATE KEY-----\n'   '\n-----END PRIVATE KEY-----' 必须写
	let publicKey = '-----BEGIN PRIVATE KEY-----\n' + '***' + '\n-----END PRIVATE KEY-----'
	const nodersa = new NodeRSA(publicKey);
	const decrypted = nodersa.encryptPrivate(password, 'base64', "utf8");
	return decrypted
}

AES 加解密

npm install crypto-js --save
// 加密
export function AESencrypt(sing, data) {
	let secretKey = CryptoJS.enc.Utf8.parse(sing);
	let ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), secretKey, {
		mode: CryptoJS.mode.ECB,
		// iv: CryptoJS.enc.Utf8.parse("3zyJFPEzh5rUeUNi"),
		padding: CryptoJS.pad.Pkcs7,
	}).toString();
	return ciphertext;
}

//解密
export function AESdecrypt(sing, data) {
	let secretKey = CryptoJS.enc.Utf8.parse(sing);
	let bbb = CryptoJS.AES.decrypt(data, secretKey, {
		mode: CryptoJS.mode.ECB,
		// iv: CryptoJS.enc.Utf8.parse("3zyJFPEzh5rUeUNi"),
		padding: CryptoJS.pad.Pkcs7,
	});
	return CryptoJS.enc.Utf8.stringify(bbb);
}

生成随机字符串作为sign

export function generateRandomString(length) {
	const characters =
		"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	let result = "";
	const charactersLength = characters.length;
	for (let i = 0; i < length; i++) {
		result += characters.charAt(Math.floor(Math.random() * charactersLength));
	}
	return result;
}

### 如何使用 RSA 公钥AES 密钥进行加解密 在现代密码学中,通常会结合非对称加密(如 RSA)和对称加密(如 AES)来实现高效且安全的数据传输。以下是具体方法及其实现流程: #### 1. 非对称加密的作用 RSA 是一种非对称加密算法,它通过一对密钥——公钥和私钥——来进行加密和解密操作。在这个过程中,**公钥用于加密数据,而私钥则用于解密数据**[^1]。 #### 2. 对称加密的角色 AES 是一种高效的对称加密算法,主要用于加密大量数据。由于其速度较快,因此常被用来加密实际通信中的消息内容。然而,为了确保安全性,在传输前需要先用 RSA 加密 AES 的密钥[^2]。 #### 3. 实现流程详解 以下是基于 PHP 和 Java 的实现方式及其核心逻辑: ##### (a) **生成 RSA 密钥对** 在 PHP 中可以利用 `openssl` 函数生成 RSA 公钥和私钥: ```php $config = array( "digest_alg" => "sha512", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); // 创建资源 $res = openssl_pkey_new($config); $details = openssl_pkey_get_details($res); if ($details) { $publicKey = $details['key']; } else { echo "Failed to generate public key"; } // 获取私钥 $privKey = ''; openssl_pkey_export($res, $privKey); ``` 上述代码片段展示了如何创建一个具有指定参数的 RSA 密钥对[^4]。 ##### (b) **加密 AES 密钥** 假设已经有一个随机生成的 AES 密钥,则可以通过以下方式进行加密: ```php $aesKey = random_bytes(16); // 假设 AES 使用的是 128 位密钥 $rsaPublicKey = file_get_contents('path/to/public/key.pem'); openssl_public_encrypt($aesKey, $encryptedAesKey, $rsaPublicKey, OPENSSL_PKCS1_PADDING); echo base64_encode($encryptedAesKey); // 输出加密后的 AES 密钥以便后续传递给接收方 ``` 这里采用了 OpenSSL 提供的功能完成加密过程,并选择了 PKCS#1 填充模式以增强兼容性。 ##### (c) **解密 A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值