通过POST以PHP中的形式传递加密数据
Passing encrypted data by POST in the form in PHP
我在 sha512 中生成两个密钥,然后将它们放在单独的文件中。之后,我读取 index.php 中的 public 键,post 表单到同一页,并对输入中的数据 post 进行编码,仅当有post.
当我尝试将加密数据post到另一个页面进行解密时,解密页面上没有任何反应。
看起来加密数据 posted 对私钥无效。
我想做的是用加密数据模拟两个服务器之间的通信。
Index.php 文件
if (isset($_POST['name']) ) {
$file = fopen('chave_publica.txt', 'r');
$file2 = fopen('chave_privada.txt', 'r');
$publicKey = fread($file,filesize("chave_publica.txt"));
// $chavePrivada = fread($file2,filesize("chave_privada.txt"));
// echo 'Valor digitado: '.$_POST['name'].'<br>';
// Encrypting
openssl_public_encrypt($_POST['name'], $criptedData, $publicKey);
echo $criptedData;
// decrypting
// openssl_private_decrypt($criptedData, $decriptado, $chavePrivada);
// echo '<br>'.'Valor decriptado: '. $decriptado;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!-- <?php echo $criptedData ?> -->
<?php if (isset($_POST['name']) ) { ?>
<form method="post" style="margin-top: 20px;" action="decryp.php">
<textarea name="name"><?php echo $criptedData; ?></textarea>
<button type="submit">Send</button>
</form>
<?php }else{ ?>
<form method="post" style="margin-top: 20px;" action="index.php" enctype="application/x-www-form-urlencoded">
<input type="text" name="name" placeholder="Seu nome aqui">
<button type="submit">Encriptar</button>
</form>
<?php } ?>
</body>
</html>
解密文件
echo $cripted = $_POST['name'];
$file2 = fopen('chave_privada.txt', 'r');
$privateKey = fread($file2,filesize("chave_privada.txt"));
// $decrypted = 'a';
openssl_private_decrypt($cripted, $decrypted, $privateKey);
echo '<br>'.'Valor decrypted: '. $decrypted;
对于那些试图制作 post 的加密字符串的人来说,不会真正起作用,因为加密时会生成特殊字符,这些会给传入 POST 带来问题。
我找到的解决方案是将字符串转换为十六进制并在另一端对其进行解码。
bin2hex("that's all you need");
# 74686174277320616c6c20796f75206e656564
hex2bin('74686174277320616c6c20796f75206e656564');
# that's all you need
PHP convert string to hex and hex to string
来自 Philippe Gerber
我在 sha512 中生成两个密钥,然后将它们放在单独的文件中。之后,我读取 index.php 中的 public 键,post 表单到同一页,并对输入中的数据 post 进行编码,仅当有post.
当我尝试将加密数据post到另一个页面进行解密时,解密页面上没有任何反应。
看起来加密数据 posted 对私钥无效。
我想做的是用加密数据模拟两个服务器之间的通信。
Index.php 文件
if (isset($_POST['name']) ) {
$file = fopen('chave_publica.txt', 'r');
$file2 = fopen('chave_privada.txt', 'r');
$publicKey = fread($file,filesize("chave_publica.txt"));
// $chavePrivada = fread($file2,filesize("chave_privada.txt"));
// echo 'Valor digitado: '.$_POST['name'].'<br>';
// Encrypting
openssl_public_encrypt($_POST['name'], $criptedData, $publicKey);
echo $criptedData;
// decrypting
// openssl_private_decrypt($criptedData, $decriptado, $chavePrivada);
// echo '<br>'.'Valor decriptado: '. $decriptado;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!-- <?php echo $criptedData ?> -->
<?php if (isset($_POST['name']) ) { ?>
<form method="post" style="margin-top: 20px;" action="decryp.php">
<textarea name="name"><?php echo $criptedData; ?></textarea>
<button type="submit">Send</button>
</form>
<?php }else{ ?>
<form method="post" style="margin-top: 20px;" action="index.php" enctype="application/x-www-form-urlencoded">
<input type="text" name="name" placeholder="Seu nome aqui">
<button type="submit">Encriptar</button>
</form>
<?php } ?>
</body>
</html>
解密文件
echo $cripted = $_POST['name'];
$file2 = fopen('chave_privada.txt', 'r');
$privateKey = fread($file2,filesize("chave_privada.txt"));
// $decrypted = 'a';
openssl_private_decrypt($cripted, $decrypted, $privateKey);
echo '<br>'.'Valor decrypted: '. $decrypted;
对于那些试图制作 post 的加密字符串的人来说,不会真正起作用,因为加密时会生成特殊字符,这些会给传入 POST 带来问题。
我找到的解决方案是将字符串转换为十六进制并在另一端对其进行解码。
bin2hex("that's all you need");
# 74686174277320616c6c20796f75206e656564
hex2bin('74686174277320616c6c20796f75206e656564');
# that's all you need
PHP convert string to hex and hex to string
来自 Philippe Gerber