如何在Web中显示解密文本

时间:2014-01-06 08:13:23

标签: php oracle encryption

惠。我已成功加密数据库中的敏感数据。现在我想解密数据并将其显示在网络上。我试过这段代码,但是我收到了一个错误。你能帮助我吗?

<?php

// Connects to the XE service (i.e. database) on the "localhost" machine
   $conn = oci_connect('DEVELOPER', 'xs2developer', 'localhost/XE');


if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

    $id = $_GET['id'];
    $query1 = "SELECT *,enc_dec.decrypt(DATA_FYP) AS DECRYPT_DATA FROM FYP WHERE   ID_USER='".$id."'";

        $stid = oci_parse($conn, $query1);
         oci_execute($stid);

echo "<form name='form1' method='post' action=' '>";    
echo "<table align='center'>";


while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
{   
    echo "<tr>";
    echo "<td><b> Hostname : </b></td>";
    echo "<td width='100'><input type='text' name='HOST_NAME' size='30' value=' " . $row['HOST_NAME'] . " ' /></td>"; 
    echo "</tr>";

    echo "<tr>";
    echo "<td><b> IP Address : </b></td>";
    echo "<td width='100'><input type='text' name='IP_ADDRESS' size='30' value= ' ".$row['IP_ADDRESS']. " '/></td>"; 
echo "</tr>";

    echo "<tr>";
    echo "<td><b> Last Login : </b></td>";
    echo "<td width='100'><input name='LAST_LOGIN' type='text' size='30' value=' " .$row['LAST_LOGIN'] . " ' /> </td>";
    echo "</tr>";

    echo "<tr>";
    echo "<td><b> Data : </b></td>";
    echo "<td width='100'><textarea name='DATA_FYP' rows='10' cols='25'>".$row['DECRYPT_DATA']."</textarea></td>"; 
    echo "</tr>";


    echo "<tr>";
    echo "<td><b> Date : </b></td>";
    echo "<td width='100'><input name='DATE_REG' type='text' size='30' value=' " .$row['DATE_REG'] . " ' /> </td>";
    echo "</tr>";

    echo "<td>&nbsp;</td>";
   echo "<td align='center'><input type='submit' name='Analyze' value='Analyze'></td>";



echo "</tr>";

}
echo "</form>";
echo "</table>";    


?>

这是我的数据库。

enter image description here

这是我得到的错误。 enter image description here

2 个答案:

答案 0 :(得分:1)

SELECT * FROM TABLE 

用于提供表中所有列的数据,因此您无法使用

SELECT *,column_name from TABLE;

使用表格的别名

更改以下行
  $query1 = "SELECT A.*,enc_dec.decrypt(A.DATA_FYP) AS DECRYPT_DATA FROM FYP A WHERE    ID_USER='".$id."'";

答案 1 :(得分:0)

这与你的解密功能没什么关系。除非您指定表或其别名,否则不能单独使用*并包含另一列(包括计算值或固定值作为伪列)。这会得到同样的错误:

select *, x as y from dual;
Error at Command Line : 2 Column : 9
Error report -
SQL Error: ORA-00923: FROM keyword not found where expected

但这没关系:

select d.*, x as y from dual d;

所以你需要:

    $query1 = "SELECT FYP.*,enc_dec.decrypt(DATA_FYP) AS DECRYPT_DATA FROM FYP WHERE   ID_USER='".$id."'";

    $query1 = "SELECT f.*,enc_dec.decrypt(f.DATA_FYP) AS DECRYPT_DATA FROM FYP f WHERE f.ID_USER='".$id."'";

无论如何都不鼓励使用select *;如果你明确列出你需要的列和它们应该的顺序,那就更清楚了。这里似乎没有太大的实际区别,但是如果在表中添加了更多的列,你就会提取数据而不是使用,在其他情况下(例如使用位置变量而不是命名变量),您可能会遇到错误。无论如何,指定列是一个很好的习惯。