cryptography 相关问题

密码学包括加密,散列和数字签名等。在crypto.stackexchange.com上可以更好地询问与软件开发没有直接关系的密码学问题。

使用 Node.js AES CTR 加密并使用 PyCrypto 解密

好吧,基本上我在使用 Python 解密时遇到了问题。 我已经成功地使用 Node.js 加密/解密数据 - 使用“aes-128-ctr”,PyCrypto 也是如此,但是当我尝试使用 No 加密时...

回答 2 投票 0

Mbed TLS:OAEP 的就地加密/解密似乎不起作用

当使用单独的缓冲区时,RSA 加密/解密在 Mbed TLS 中起作用,其中

回答 1 投票 0

Mbed-TLS:OAEP 的就地加密/解密似乎不起作用

当使用单独的缓冲区时,RSA 加密/解密在 Mbed-TLS 中工作,其中

回答 1 投票 0

RSA 加密-解密:BadPaddingException:数据必须以零开头

对于一个被问了很多次的问题,我很抱歉向你询问你的技能。 我有一个关于 RSA 加密的问题。 我已经检查过有关此问题的其他主题,但我没有找到任何有用的答案...

回答 2 投票 0

MbedTLS:mbedtls_rsa_rsaes_oaep_encrypt/decrypt 支持就地加密/解密吗? (应该可以,但是好像没用?)

C 程序中带有 RSA 的 IN MbedTls 在使用单独的缓冲区时可以工作(对于纯文本、密文和解密文本,即纯文本和解密文本的内容是相同的...

回答 1 投票 0

在实现 NTT cpp 代码时遇到此错误:在抛出 'std::bad_alloc' 实例后终止调用 What(): std::bad_alloc

我最近开始实现后量子加密,需要实现多项式乘法,其中使用数论变换(ntt)来减少其计算时间,这

回答 1 投票 0

无法通过 CNG API 将 NodeJS 生成的公钥加载到 Windows 中

我使用加密库在 NodeJS 中生成 RSA 公钥/私钥对: crypto.generateKeyPair( “RSA”, { 模数长度:1024, 公钥编码:{ 类型:&

回答 2 投票 0

如何使用 System.Security.Cryptography 方法将 CryptAcquireContext 转换为 .NET 8

我需要解密使用 advapi32.dll 加密的文件。我需要使用 .NET 8 编写解密方法,并使用 C# 编写内置的 System.Security.Cryptography 方法,如下所示

回答 1 投票 0

AES-GCM 与用户空间的内核加密 API

我正在尝试使用内核加密 API 从用户空间与硬件加速器进行通信。 我使用 af_alg 与内核进行通信。我可以使用 API 进行散列或“正常...

回答 2 投票 0

松树脚本第一次交易暨。利润不靠谱? BTCUSD 1美元初始投资

我为tradingview制作了一个pine脚本,它使用1美元的初始资金和0.5美元的订单大小来交易BTCUSD。但由于某种原因,策略测试者的交易列表显示,第一个...

回答 2 投票 0

以太坊:如何从公钥生成有效地址?

我正在使用此代码生成私钥、公钥和地址,根据以下内容: 公钥是使用椭圆曲线数字签名算法从私钥生成的。你...

回答 1 投票 0

以太坊:尽管交易数据被恶意修改,仍可验证签名

假设我们有这段代码在以太坊中签署一个简单的交易,然后使用椭圆曲线数字签名算法(ECDSA)验证签名,就像在现实生活中一样: 常量 { 秒...

回答 1 投票 0

如何读取智能卡参考数据中的这些P1和P2参数?

我目前正在阅读很多有关智能卡标准的内容(ISO 7816、ECC-IAS...)。在我的研究过程中,我遇到了很多类似于下面所示的 APDU 命令: 在我的场景中,我需要 L...

回答 2 投票 0

使用 PHP 加密和解密文件

我想从上传文件中解密扩展名为 .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."; } ?>

回答 1 投票 0

Delphi Enceryption Compendium 中具有 24 字节块大小的 3TDES

我看到Delphi Encryption Compendium有一个3TDES算法(https://github.com/luizvaz/DelphiEncryptionCompendium/blob/4cf00a54d4ca9d6f356c1ffa1106f4be017bb6d4/Source/Cipher1.pas#L54)。这是...

回答 1 投票 0

是否可以减少tls客户端证书的签名操作次数?

这不是一个特定于 golang 的问题。但要做好准备: 我正在使用 golang 和 tls 客户端证书。 tls 客户端证书配置如下: 证书 := tls. 证书{ 证书...

回答 1 投票 0

如何使用 fernet 密码术修复解密功能

我正在尝试创建一个程序,该程序采用标题、注释和主密钥,然后使用 python 加密或解密该消息。但是当我尝试使用解密笔记功能来解密该消息时...

回答 1 投票 0

使用 pyca/cryptography 的 DES 密码 (PBEWithMD5AndDES)

为了支持一些遗留应用程序,我需要在Python中实现PBEWithMD5AndDES(RFC2898第6.1节)。我知道这是不安全的,已被弃用,不应再使用。但这是可悲的

回答 2 投票 0

在磁盘上保存和加载加密/RSA私钥

我正在使用 crypto/rsa,并试图找到一种正确保存和加载密钥的方法。是否有正确的方法从 rsa.PrivateKey 创建 [] 字节。如果是这样,有没有办法对 rsa 正确执行此操作。

回答 4 投票 0

AWS Lambda |运行时导入模块错误:无法从“cryptography”导入名称“x509”

我正在尝试在 AWS Lambda 上使用 Python 部署以下函数: 导入 json 导入boto3 导入操作系统 从 azure.storage.blob 导入 BlobServiceClient、BlobClient、ContainerClient def lambda_ha...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.