【问题标题】:Laravel custom User Model- MD5 - TripleDES EncryptionLaravel 自定义用户模型 - MD5 - TripleDES 加密
【发布时间】: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


【解决方案1】:

也许我之前没有很好地解释自己。使用 Laravel 在新框架中开发,我需要使用旧数据库登录。我误以为密码的加密不同,需要某种配置。但是没有,我只需要在新用户模型的getAuthPassword中使用bcrypt,像这样。

public function getAuthPassword() {
return bcrypt($this->userPassword);
}

【讨论】:

猜你喜欢
  • 2016-04-23
  • 2022-12-12
  • 2020-05-22
  • 2022-01-23
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2021-01-12
  • 2016-07-13
相关资源
最近更新 更多