我有一个应用程序来处理来自世界各地的客户,当然,我希望进入我的数据库的所有内容都是UTF-8编码的.
对我来说主要的问题是我不知道任何字符串的来源是什么编码 - 它可以来自文本框(使用<form accept-charset="utf-8">仅在用户实际提交表单时才有用),或者它可能是从上传的文本文件,所以我真的无法控制输入.
我需要的是一个函数或类,它确保进入我的数据库的内容尽可能采用UTF-8编码.我已经尝试iconv(mb_detect_encoding($text), "UTF-8", $text);
但是有问题(如果输入是'fiancée'它返回'fianc').我尝试了很多东西= /
对于文件上传,我喜欢要求最终用户指定他们使用的编码,并向他们展示输出结果的预览,但这对于讨厌讨厌的黑客没有帮助(事实上,它可以使他们的生活更容易一点).
我已经阅读了关于这个主题的其他SO问题,但它们似乎都有微妙的差异,例如"我需要解析RSS提要"或"我从网站上搜集数据"(或者,实际上,"你不能").
但必须有一些东西至少有一个好的尝试!
如果我使用AES(System.Security.Cryptography)简单地加密和解密SQL服务器中的blob或memo字段,那么我在哪里将"Key"和"IV"值存储在服务器上?(文件,Regkey,Dbase,......)
那些AES"Key"和"IV"值的保护是什么?
背景问题更多:如果"他们"攻击服务器并获得dbase ...那么他们可能也可以进入加密程序的程序(它在同一台服务器上,无法帮助它)...如果"他们"非常好,那么他们会注意到存储"Key"和"IV"值的位置......(.NET 4.5 ILSPY)并且所有内容都可以再次解密.
请指教?你们如何处理AES"Key"和"IV"值?
Ps:这不是关于pwd字段...所以,它不是关于散列...它的纯数据加密.
我正在尝试使用内置的加密库解码Node.js中的以下base64编码的密文
2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==
Run Code Online (Sandbox Code Playgroud)
它似乎与PHP的mcrypt函数一起使用字符串typeconfig.sys^_-作为键,如将值输入到http://www.tools4noobs.com/online_tools/decrypt/并选择Blowfish,ECB,Base64 decode所示.
但是,当我在Node.js中运行以下代码时:
var crypto = require('crypto');
var data = "2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==";
var decipher = crypto.createDecipher('bf-ecb', 'typeconfig.sys^_-');
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);
Run Code Online (Sandbox Code Playgroud)
我得到垃圾输出:
y
?:????d?(????Q?i??z1??4?? ?k?(? ??a5????u??73c/??(???)????????f????
?ec?-<z?8????(?-L?????I??1L*??u?4?j-??h?@\P)???.?^???q??U???W&?x??85?T-?9,dE<g}?`*?
??|@????k"?!?D'u???,x??7????
??9q=q?q???>?w?T????H3??i)R??zy??C??
??o?
Run Code Online (Sandbox Code Playgroud)
我也尝试过对库本身的测试,因为它似乎能够处理它自己编码的东西:
var crypto = require('crypto')
var cipher = crypto.createCipher("bf-ecb", "key");
var data = cipher.update("foobar", "utf8", "base64");
data += cipher.final("base64");
console.log(data);
var decipher = crypto.createDecipher("bf-ecb", "key");
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);
Run Code Online (Sandbox Code Playgroud)
生产:
y0rq5pYkiU0=
foobar
Run Code Online (Sandbox Code Playgroud)
但复制并粘贴base64字符串并将其输入http://www.tools4noobs.com/online_tools/decrypt/以及键"key"也会产生垃圾输出. …