私はutf-8の問題に関するsimilairの問題に関する多くの記事を読んできましたが、いくつか試しましたが、原因を見つけることができません。暗号化されたen base64エンコードされた文字列データベース内で同じではありません
私はlivecodeを使用しており、一部の文字列をデータベースに暗号化したいと考えています。だから、私はLivecodeで暗号化し、次にbase64encodeをPHP/PDO経由でデータベースに送ります。 encrypt - > base64encode - > base64decode - > livecode内のdecryptが正常に機能します。
私はbase64のコード化されたデータをMariaDBデータベースに送りますが、+はスペースになっています。 データベース、テーブル、カラムはすべてutf8mb4_unicode_ciです。 データベースのphpmyadminでスペースを手動で+に変更し、Livecodeで読み込んだ場合、base64decodes - > decrypts correct!
これは私がDBに接続して更新するために使用するPHPファイルです:
<?php
// the connect.php file
$servername = "localhost";
$username = "blabla";
$password = "blabla";
try {
//$db = new PDO("mysql:host=$servername;dbname=blabla",$username, $password);
$db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8", $username, $password);
//$db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8mb4", $username, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"));
// set the PDO error mode to exception
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
あなたは私もPDOを試してみました
<?php
//this is the file to update the DB
require_once 'connect.php';
//
try {
$stmt = $db->prepare("UPDATE tabel_users SET user=:user,
password=:password, email=:email, userlevel=:userlevel WHERE
id_user=:id_user");
$stmt->bindParam(':id_user', $_POST['id_user'], PDO::PARAM_INT);
$stmt->bindParam(':user', $_POST['user'], PDO::PARAM_STR);
$stmt->bindParam(':password', $_POST['password'], PDO::PARAM_STR);
$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
$stmt->bindParam(':userlevel', $_POST['userlevel'], PDO::PARAM_STR);
//$stmt->bindParam(':user', $_POST['user'], PDO::PARAM_LOB);
//$stmt->bindParam(':password', $_POST['password'], PDO::PARAM_LOB);
//$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_LOB);
//$stmt->bindParam(':userlevel', $_POST['userlevel'], PDO::PARAM_LOB);
$affected_rows = $stmt->rowCount();
if($stmt->execute()) { echo "Ge-update informatie verzonden naar de
database!"; } else { echo "Failure!"; };
}
catch(PDOException $e)
{
echo "Not updated: " . $e->getMessage();
}
//var_dump($_POST)
$db = NULL;
?>
も接続ファイル内のいくつかの文字セットを試してみました見ることができます:: PARAM_LOB VARCHAR VARBIN BLOBを試しましたが、これは何も変わりませんでした。
私の最初の推測は、LivecodeがPHPファイルに投稿している間に変なことをするということでした。しかし、送信する直前に変数をチェックすると、送信する文字列に+が付きます。だから私はそれが間違っているところで実際にそれを得ることはありません。
注意してください。データベースに暗号化されたパスワードを保存することは、常に悪い考えです!あなたが保存する必要があるのは、パスワードの片方の塩漬けのハッシュです。 LC9に入っている新しいmessageDigestもあります。これは、md5とsha1の両方が今日のコンピュータを扱うには弱すぎるため、より安全なハッシュを可能にします。 – hliljegren
データベースの暗号化されたパスワードが悪い考えであるのはなぜですか?はい、私は新しいメッセージDigestが来ていることを知っています、それはdp6からdp7にシフトされました。だからもう少し待たなければならない。 – jjsjjs
Okでは、パスワードを暗号化する代わりに、ハッシュについてもっと読んだことがあります。これは一方的な解決方法です。デハッシュはできません。ありがとう! – jjsjjs