RSA是一种通用的公钥算法,可用于加密和签名。它是Internet上使用的大多数安全协议的核心组件,包括SSL / TLS协议套件。有关IBM Rational Software Architect的问题,请使用rational-rsa标记。
我正在尝试编写一个脚本来在powershell中创建PEM证书文件。我不确定我所做的是否完全错误,但是当我尝试在 socat OPENSSL 中使用 PEM 文件时,它返回了...
PKCS11中的机制是什么意思?例如:CKM_RSA_PKCS。 机制(CKM_RSA_PKCS)和签名算法(NoneWithRSA)有什么区别?
我的最终目标是创建一个 JWE 字符串,给定 iOS 的公钥。 为了让事情变得更容易,我已经分解了我的步骤,所以最紧迫的是,我需要使用 RSA 创建一个加密密钥
我已使用 openssl pkeyutl -sign -in data.txt -inkey key.pem -out data.sig 签署文件 我可以验证它并使用 openssl pkeyutl -verifyrecover -in data.sig -pubin -inkey pubkey.p...
无法在JAVA中用PublicKey加密RSAOAEP384
美好的一天! 我有一个有效的 JavaScript 脚本,可以从服务器获取令牌。我需要在 Java 中实现类似的东西。本质是我们从服务器接收到一个字符串,格式为...
我需要将未加密的 RSA 私钥替换为加密的私钥。 我用了 openssl -newKey rsa:2048 -new sha256 ... 生成 pem。我看到生成的 pem 开始于...
在过去的一周半里,我一直在尝试使用 Python 生成用于 RSA 加密的大质数,但没有成功。费马素性测试在 512 位尺度上是不可行的,而且我...
我是系统管理新手,我正在尝试设置(/保护)我的第一个 VPS。 据我了解,使用密钥比使用密码“更安全”,所以在这里我试图这样做。 我已经
我正在开发一个 Flutter 应用程序,该应用程序为使用 BIP39 和 BIP32 的用户创建加密钱包。 使用 BIP39 和 BIP32 我可以为用户创建助记符、私钥和公钥。 现在需要做...
当使用单独的缓冲区时,RSA 加密/解密在 Mbed TLS 中起作用,其中
当使用单独的缓冲区时,RSA 加密/解密在 Mbed-TLS 中工作,其中
RSA 加密-解密:BadPaddingException:数据必须以零开头
对于一个被问了很多次的问题,我很抱歉向你询问你的技能。 我有一个关于 RSA 加密的问题。 我已经检查过有关此问题的其他主题,但我没有找到任何有用的答案...
MbedTLS:mbedtls_rsa_rsaes_oaep_encrypt/decrypt 支持就地加密/解密吗? (应该可以,但是好像没用?)
C 程序中带有 RSA 的 IN MbedTls 在使用单独的缓冲区时可以工作(对于纯文本、密文和解密文本,即纯文本和解密文本的内容是相同的...
我想从上传文件中解密扩展名为 .txt .docx .xlsx 和 .pdf 的文件。 加密.php 我想从上传文件中解密扩展名为 .txt .docx .xlsx 和 .pdf 的文件。 加密.php <?php include "koneksi.php"; function generateKeyPairFromFileName(){ $config = array( "default_md" => "sha512", "private_key_bits" => 512, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); $keypair = openssl_pkey_new($config); if (!$keypair) { die("Failed to generate key pair"); } openssl_pkey_export($keypair, $privateKey, null, $config); $publicKey = openssl_pkey_get_details($keypair); $publicKey = $publicKey['key']; return array( 'publicKey' => $publicKey, 'privateKey' => $privateKey ); } function savePublicKeyToLocal($publicKey, $fileName) { $publicKeyPath = $fileName . '_public_key.pem'; // Ganti dengan lokasi penyimpanan kunci publik Anda file_put_contents($publicKeyPath, $publicKey); return $publicKeyPath; } // Fungsi untuk menyimpan kunci pribadi ke file lokal function savePrivateKeyToLocal($privateKey, $fileName) { $privateKeyPath = $fileName . '_private_key.pem'; // Ganti dengan lokasi penyimpanan kunci pribadi Anda file_put_contents($privateKeyPath, $privateKey); return $privateKeyPath; } // Fungsi untuk mengenkripsi file menggunakan AES function encryptFile($data, $key) { // Buat vektor inisialisasi (IV) acak $iv = openssl_random_pseudo_bytes(16); // Enkripsi data menggunakan AES-256-CBC dengan kunci dan IV yang diberikan $encryptedData = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); // Base64 encode hasil enkripsi $encryptedDataBase64 = base64_encode($encryptedData); // Simpan atau kirim data terenkripsi ke tempat penyimpanan atau penerima // echo "Data terenkripsi: " . $encryptedDataBase64; return $encryptedDataBase64; } if(isset($_POST['generate'])){ $uploadedFileName = $_FILES['file']['name']; $filetmp = $_FILES['file']['tmp_name']; // Membaca isi file $fileContent = file_get_contents($filetmp); $KeyPair = generateKeyPairFromFileName(); $publicKeyPath = savePublicKeyToLocal($KeyPair['publicKey'], $uploadedFileName); $publicKeyPath = savePrivateKeyToLocal($KeyPair['privateKey'], $uploadedFileName); $encryptedFileContent = encryptFile($fileContent, $KeyPair['publicKey']); // echo $encryptedFileContent; $query = "INSERT INTO upload (nama_file, filedata) VALUES ('$uploadedFileName', '$encryptedFileContent')"; if (mysqli_query($conn, $query)) { echo "File berhasil diunggah dan dienkripsi."; } else { echo "Gagal mengunggah dan menyimpan file ke database: " . mysqli_error($conn); } } ?> <form action="" method="post" enctype="multipart/form-data"> Pilih file untuk diunggah (PDF, DOCX, XLSX, TXT, maks 15 MB): <input type="file" name="file"> <button name="generate" type="submit">Generate</button> </form> 我将私钥和公钥保存在本地。上面的脚本用于在保存到数据库之前加密数据。 ecnrypt.php <?php error_reporting(E_ALL); ini_set('display_errors', 1); include "koneksi.php"; // Fungsi dekripsi function decryptFile($data, $key) { // Decode data terenkripsi dari base64 $encryptedData = base64_decode($data); // Ambil IV dari data terenkripsi $iv = openssl_random_pseudo_bytes(16); $decryptedData = openssl_decrypt($encryptedData, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); // Kembalikan data yang telah didekripsi return $decryptedData; } if(isset($_GET['nama_file'])){ // Nama file $fileName = $_GET['nama_file']; // Membaca kunci privat try { $privateKeyPath = $fileName . '_private_key.pem'; if (!file_exists($privateKeyPath)) { throw new Exception("File kunci privat tidak ditemukan: " . $privateKeyPath); } $privateKey = file_get_contents($privateKeyPath); } catch (Exception $e) { echo "Gagal membaca kunci privat: " . $e->getMessage(); exit; } // Mengambil data file terenkripsi dari database $query = "SELECT filedata FROM upload WHERE nama_file = '$fileName'"; $result = mysqli_query($conn, $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); // Dekripsi data $decryptedData = decryptFile($row['filedata'], $privateKey); // Tampilkan data yang telah didekripsi echo $decryptedData; } else { echo "File tidak ditemukan!"; } } 我要解密的文件是空的。我的意思是在解密的数据上返回空。有人有同样的问题吗? 期待包含解密数据的文件。 我检查了我的 PHP 脚本,它似乎有效地结合了 RSA 和 AES 加密来进行文件上传。 加密.php <?php error_reporting(E_ALL); ini_set('display_errors', 1); include "koneksi.php"; // Enkripsi if(isset($_POST['generate'])){ // Mendapatkan informasi file yang diunggah $uploadedFileName = $_FILES['file']['name']; $uploadedFileSize = $_FILES['file']['size']; $uploadedFileType = strtolower(pathinfo($uploadedFileName, PATHINFO_EXTENSION)); $sql = "SELECT nama_file FROM upload WHERE nama_file='$uploadedFileName'"; $query = mysqli_query($conn, $sql); $rows = mysqli_num_rows($query); if( $rows > 0) { return header('location:./home.php?message=error'); } // Batasi jenis file yang diperbolehkan dan ukuran file $allowedTypes = array('txt', 'docx', 'pdf', 'xlsx'); $maxFileSize = 15 * 1024 * 1024; // 15 MB dalam bytes if (in_array($uploadedFileType, $allowedTypes) && $uploadedFileSize <= $maxFileSize) { // Menghasilkan pasangan kunci RSA $rsaKey = openssl_pkey_new(array( 'private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA )); // Mendapatkan kunci privat openssl_pkey_export($rsaKey, $privateKey); // Mendapatkan kunci publik $publicKey = openssl_pkey_get_details($rsaKey)['key']; // Menyimpan kunci dengan awalan nama file yang diunggah $privateKeyFileName = pathinfo($uploadedFileName, PATHINFO_FILENAME) . "_private_key.pem"; $publicKeyFileName = pathinfo($uploadedFileName, PATHINFO_FILENAME) . "_public_key.pem"; // echo $privateKeyFileName; file_put_contents('./keys/'. $privateKeyFileName, $privateKey); file_put_contents('./keys/'. $publicKeyFileName, $publicKey); // Menghasilkan kunci AES acak $aesKey = openssl_random_pseudo_bytes(16); // Mengenkripsi kunci AES menggunakan kunci publik RSA openssl_public_encrypt($aesKey, $encAesKey, $publicKey); // Unggah file $uploadedFile = $_FILES['file']['tmp_name']; // Mengenkripsi data menggunakan AES $iv = openssl_random_pseudo_bytes(16); $ciphertext = openssl_encrypt(file_get_contents($uploadedFile), 'aes-128-cbc', $aesKey, 0, $iv); // Menyimpan data terenkripsi ke sebuah variabel $encryptedFileContent = $iv . $ciphertext; // Menyimpan kunci AES terenkripsi ke sebuah file dengan awalan nama file yang diunggah $encryptedAesKeyFileName = pathinfo($uploadedFileName, PATHINFO_FILENAME) . "_encrypted_aes_key.bin"; file_put_contents('./keys/'. $encryptedAesKeyFileName, $encAesKey); // Memasukkan data file terenkripsi ke dalam database $query = "INSERT INTO upload (nama_file, filedata, mimetype) VALUES ('$uploadedFileName', '$encryptedFileContent', '$uploadedFileType')"; if (mysqli_query($conn, $query)) { echo "File berhasil diunggah dan dienkripsi."; header('location:./home.php?message=success'); } else { echo "Gagal mengunggah dan menyimpan file ke database: " . mysqli_error($conn); } } else { echo "Jenis file yang diunggah tidak diperbolehkan atau ukuran file melebihi batas maksimum."; } } ?> 解密.php <?php error_reporting(E_ALL); ini_set('display_errors', 1); include "koneksi.php"; if(isset($_GET['dekripsi'])) { $id = $_GET['dekripsi']; $query = "SELECT nama_file, filedata FROM upload WHERE id_file='$id'"; $result = mysqli_query($conn, $query); $row = mysqli_fetch_assoc($result); $uploadedFileName = $row['nama_file']; // Load RSA private key $privateKeyFileName = pathinfo($uploadedFileName, PATHINFO_FILENAME) . "_private_key.pem"; $privateKey = file_get_contents('./keys/'. $privateKeyFileName); // Decrypt AES key using RSA private key $encryptedAesKeyFileName = pathinfo($uploadedFileName, PATHINFO_FILENAME) . "_encrypted_aes_key.bin"; $encAesKey = file_get_contents('./keys/'. $encryptedAesKeyFileName); openssl_private_decrypt($encAesKey, $decAesKey, $privateKey); // Load encrypted data from the database (Assuming you have a function to retrieve data from the database) $encryptedData = $row['filedata']; // Decrypt data using AES $iv = substr($encryptedData, 0, 16); $ciphertext = substr($encryptedData, 16); $plaintext = openssl_decrypt($ciphertext, 'aes-128-cbc', $decAesKey, 0, $iv); // Prepare file for download header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($uploadedFileName)); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . strlen($plaintext)); ob_clean(); flush(); echo $plaintext; // exit; } else { echo "File name not provided."; } ?>
我正在使用 crypto/rsa,并试图找到一种正确保存和加载密钥的方法。是否有正确的方法从 rsa.PrivateKey 创建 [] 字节。如果是这样,有没有办法对 rsa 正确执行此操作。
我正在尝试根据公钥验证签名,并且我使用 RSACryptoproviders 等实现了这一点。 我设置公钥(以PEM格式导入密钥,读取rsa参数,然后
我已经尝试自动化安装和配置 RSA Securid 一段时间了。这是我一直在使用的参考: https://www.turbogeek.co.uk/how-to-install-rsa-authenticatio...
我正在尝试在 Erlang 中做一些与公钥相关的事情,它们要求我跟踪公钥。根据此页面,我应该能够使用 file:read_file/1 和
无法在 iOS 中使用 SecKeyCreateWithData 加载 RSA-PSS 公钥
我为 rsa-pss-sha512 签名算法生成的密钥存在问题:我无法使用 SecKeyCreateWithData() 将其加载到我的 iOS 代码中。 这是我创建它的方法: % openssl genpkey -
如何使用 openssl 生成 x509 RSA-PSS 证书,其预告片字段包含值 0xBC 满足 RFC8017
使用 Windows 版本的 openssl(3.2.1),我们希望生成具有以下条件的证书: 哈希方法:SHA-256 掩码生成功能:具有 SHA-256 的 MGF1 盐的长度:32字节 特拉...