mysql存储过程编码输出参数字符串

mysql存储过程编码输出参数字符串,mysql,Mysql,我有一个存储过程: CREATE PROCEDURE get_mysql_user_pass( IN user_type VARCHAR(16), IN aes_passphrase VARCHAR(255), OUT mysql_user VARCHAR(16), OUT mysql_pass VARCHAR(32), ) READS SQL DATA SQL SECURITY INVOKER BEGIN DECLARE aes_key VARCHAR(255); S

我有一个存储过程:

CREATE PROCEDURE get_mysql_user_pass(
  IN user_type VARCHAR(16),
  IN aes_passphrase VARCHAR(255),
  OUT mysql_user VARCHAR(16),
  OUT mysql_pass VARCHAR(32),
)
READS SQL DATA
SQL SECURITY INVOKER
BEGIN
  DECLARE aes_key VARCHAR(255);

  SET @aes_key = SHA1(aes_passphrase);

  SELECT 
    AES_DECRYPT(user_column,@aes_key), 
    AES_DECRYPT(pass_column,@aes_key) 
  INTO 
    mysql_user, mysql_pass 
  FROM my_table 
  WHERE my_column = user_type;
END;
  • 问题
如果我使用字母数字,比如“hosi654dl25lkjdfwhatever”,作为mysql,你可以传递一切,但是如果我有这样的“rIµuþYfM09ÃQýOýjýWfYf½4”,因为mysqlýu pass返回抓取字符串,比如“rIµuýuýYfM09ýQýOýOýjýWfYf½195; 4”

  • 我从PHP中调用它

    • 问题: 是否有任何方法可以将字符串参数“mysql_pass”编码出来并使其在PHP中可读?(因为解密似乎是正确的)

我无法完全理解您的意思,也许您应该编辑问题并显示实际的过程调用,而不是用文字描述(使用字母数字?何处?)。在任何情况下,我知道您加密二进制数据,并在以后成功解密。但您希望将其显示给用户查看。如果用户真的可以利用它,你可以生成一个十六进制转储。对不起,阿尔瓦罗,这是因为我的英语不好。您理解正确,只是我不会向用户显示。我想将这些数据保存到php变量中,并使用它们用另一个用户密码连接到数据库。我已经输入了十六进制(AES_DECRYPT(pass_column,@AES_key)),它现在以php“7249C2B5C2B075C3BD34…”返回我。现在我不知道如何在PHP中解码,所以我将原始密码保存在PHP variableSOLVED中。(关于php中hex2bin()的最后一个疑问是,现在一切正常了。php字符串可以处理二进制数据。事实上,如果你将其序列化为文本,你将打破它。(出于好奇,你怎么会有二进制密码?)做
HEX()
+
hex2bin()
就像做
123+5-5
:-?