【发布时间】:2018-08-26 01:13:20
【问题描述】:
我正在将带有 SQL DB 的旧 .net 应用程序改编为 Laravel 框架。我已经完成了迁移和模型,sqlsrv 驱动程序和连接文件正在工作,但是我使用的加密方法有问题。我对加密了解不多。
生产中的应用程序具有以下加密功能:
private string Key = "";
private readonly byte[] IVector = new byte[8] { 17, 19, 25, 17, 10, 32, 161, 24 };
public string Encrypt(string inputString)
{
byte[] buffer = Encoding.ASCII.GetBytes(inputString);
TripleDESCryptoServiceProvider tripleDes = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
tripleDes.Key = MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Key));
tripleDes.IV = IVector;
ICryptoTransform ITransform = tripleDes.CreateEncryptor();
return Convert.ToBase64String(ITransform.TransformFinalBlock(buffer, 0, buffer.Length));
}
在 Laravel 上,Auth::attempt 有效,但凭据不匹配,我认为是因为加密方法。
Auth::attempt([
'userName' => 'hard_coded_username',
'password' => 'hard_coded_password',
]);
我已经检查了不同的加密方法来验证这一点。
$db_pass = 'hard_codded_encrypted_password_from_db';
$md5 = md5($db_pass);
$bcrypt = bcrypt($md5);
$encrypted = Crypt::encrypt($db_pass);
$encryptedMD5 = Crypt::encrypt($md5);
dd($md5, $bcrypt, $encryptedMD5, $encrypted, $encryptedMD5);
那么,我怎样才能让它工作呢?任何建议或指导将不胜感激。
【问题讨论】:
-
现有的生产代码严重损坏且不安全。这是您在新版本中修复它的机会。不应该使用 TripleDES,不应该使用 MD5(尤其是作为 KDF),不应该使用固定的 IV,不胜枚举……使用 AES,从 CSPRNG 生成随机 IV,以及现代的、安全的KDF 类似于 PBKDF2。如果可以,请尝试使用 GCM 模式,否则使用 HMAC 进行身份验证。如果你对加密知之甚少,那么你就是这个工作的错误人选。现有的生产代码是不安全的,迟早会有人利用它。
-
.NET 代码与 Laravel 代码完全不同。不确定您要做什么,但 SO 不是代码转换服务。
-
@LukeJoshuaPark 感谢我的朋友,我们目前正在开发新版本,其中包含所有需要的修复。这个问题是针对特定任务的,但我相信我们会像您指出的那样工作。
-
感谢@MaartenBodewes 你是对的,Laravel 和 .NET 实际上是完全不同的。我正在尝试解决问题,我不是在寻找代码转换服务。我正在寻找像你这样经验丰富的专业人士的指南。 -- 每月有超过 5000 万专业和有抱负的程序员访问 Stack Overflow,以帮助解决编码问题、开发新技能和寻找工作机会。 -- stackoverflow.com/company
标签: asp.net sql-server laravel encryption laravel-5