前端JS代码(node-forge.js):
function o(e) {
var t = r.pki.publicKeyFromPem("PUBLIC KEY").encrypt(e, "RSA-OAEP", {
md: r.md.sha256.create(),
mgf1: {
md: r.md.sha1.create()
});
return window.btoa(t)
python代码:
pip install pycryptodome
import base64
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Hash import SHA256, SHA1
from Crypto.PublicKey import RSA
from Crypto.Signature import pss
def encrypt_password(password):
key = RSA.importKey(open('sign.pem').read())
cipher = PKCS1_OAEP.new(
key=key,
hashAlgo=SHA256,
mgfunc=lambda x, y: pss.MGF1(x, y, SHA1))
ciphertext = cipher.encrypt(password.encode())
return base64.b64encode(ciphertext).decode()
RT,记录python 模拟 node-forge js加密代码前端JS代码(node-forge.js):function o(e) { var t = r.pki.publicKeyFromPem("PUBLIC KEY").encrypt(e, "RSA-OAEP", { md: r.md.sha256.create(), mgf1: { md: r.md.sha1.create() } }); ret
http://download.csdn.net/download/xiaozhegaa/10226929
一、API介绍
1、 调用获取RSA公钥API获取RSA公钥,落地成本地文件,假设为public.pem
2、 确定public.pem文件的存放路径,同时修改代码中文件的输入路径,加载RSA公钥
3、 用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_O
跟DES,AES一样, RSA也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作。
但跟AES等不同的是, block length是跟key length 以及所使用的填充模式 有关的。
1)RSA_PKCS1_PADDING 填充模式,最常用的模式
要求:输入 必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 R...
RSA组件之MGF(Mask Generation Function)实现
文章目录RSA组件之MGF(Mask Generation Function)实现1. RSA 算法中使用 MGF 函数1.1 OAEP 中对 MGF 的调用1.2 PSS 中对 MGF 的调用2. RFC 8017 中关于 MGF 函数的描述3. MGF 函数代码3.1 实现代码3.2 测试代码3.3 编译代码和并测试4. 其它
1. RSA 算法中使用 MGF 函数
在非对称加密算法 RSA 中,如果加密模式为 RSA-OAEP
如前面《RSA算法原理》里描述,RSA算法的加解密操作本质上来讲就是大数的模幂运算,RSA算法的安全性很大程度上取决于填充方式,因此在一个安全的RSA加密操作需要选择一个合适的填充模式,最常见的加密填充模式有RSA_PKCS_V15和RSA_PKCS_V21(OAEP),下面还是以mbedtls里的RSA加密源码为例做进一步分析。
一、RSA加密
* Add the message ...
import forge from 'node-forge';
// base64转换(一般公钥私钥生成都是经过base64转换处理)
const encode64 = str => forge.util.encode64(str);
// 加密的方法,入参是:待加密文本,公钥,是否需要转化为Pem格式
const encrypted
PKCS1。将数据长度分成密钥长度-11byte,比如密钥是1024bit,那么长度就是1024/8-11=117bytes,具体的格式:先填0,2,然后随机生成其他的byte,后面才是真正的数据
PKCS1_OAEP将数据长度分成密钥长度-41byte,比如密钥是1024bit,那么长度就是1024/8-41=77bytes,.
1、RSA_PKCS1_PADDING 填充模式(最常用的模式)
输入:必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11
如果输入的明文过长,必须切割, 然后填充
输出:和modulus一样长
根据这...
RSA算法是一种非对称加密算法,它需要生成公钥和私钥,然后使用公钥加密数据,使用私钥解密数据。下面是一个使用RSA-3072算法进行加密的C++示例代码:
```c++
#include <iostream>
#include <string>
#include <openssl/rsa.h>
#include <openssl/pem.h>
using namespace std;
int main() {
string message = "Hello, this is a message to be encrypted using RSA-3072 algorithm!";
string public_key_file = "public_key.pem";
// 读取公钥文件
FILE* fp = fopen(public_key_file.c_str(), "rb");
if (!fp) {
cout << "Failed to read public key file!" << endl;
return -1;
RSA* rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
fclose(fp);
// 加密
int key_size = RSA_size(rsa);
unsigned char* encrypted = new unsigned char[key_size];
int encrypted_length = RSA_public_encrypt(message.length(), (unsigned char*)message.c_str(), encrypted, rsa, RSA_PKCS1_PADDING);
// 输出加密结果
cout << "Encrypted message: ";
for (int i = 0; i < encrypted_length; i++) {
printf("%02X", encrypted[i]);
cout << endl;
RSA_free(rsa);
delete[] encrypted;
return 0;
需要注意的是,使用RSA算法进行加密和解密的数据长度不能超过密钥长度减去一定的额外长度(例如PKCS#1填充方式需要额外长度11字节),否则加密或解密会失败。对于RSA-3072算法来说,密钥长度为3072位,即384字节,使用PKCS#1填充方式则额外长度为11字节,因此每次加密的数据长度不能超过373字节。如果需要加密更大的数据,可以考虑使用对称加密算法。