簡體   English   中英

如何為提供的密碼和鹽復制密碼哈希(PHP / MySQL)

[英]How to replicate password hash for provided password and salt (PHP/MySQL)

密碼需要與最初在.NET平台上創建並存儲在MSSQL上的密碼哈希匹配(因此加密可能是SHA1)。

這是MySQL表的樣子:

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `UserName` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `PasswordHash` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `PasswordSalt` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=12535 ;

--
-- Dumping data for table `test`
--

INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(9836, 'demoadmin', '?z1??9t|????e&??9aK', -1190254076);
INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(12534, 'sunny', '??o\\(R?8~??6>?t????o', 549612932);

我找到了兩個非常接近我需要完成的示例,但是我能夠使它工作。

示例1: http//gilbert.pellegrom.me/replicating-net-password-hashing-in-php/

范例2: http : //www.kevinbruce.com/Blog?area_id= 6& blog_id= 3& ba_id=27

用戶名和密碼為:

第一用戶:demoadmin / demotest第二用戶:sunny / eclyptix

請幫忙!

凱文·布魯斯(來自您引用的第二個例子)。

就其價值而言,我的經驗從未解決過任何問題。 我實際上和伊麗莎白·史密斯(Elizabeth Smith)(他在Windows上使用PHP核心工作)進行過交談,她同意,由於PHP對字符編碼的支持,在與.NET相同級別的哈希支持方面存在很大的脫節。 這就是我所懷疑的。

看來您有編碼問題:

'?z1??9t|????e&??9aK'

您的原始代碼似乎已損壞,並且正在將超出可打印ASCII范圍的字符轉換為問號。

可以嘗試在PHP中復制此行為。 但是,繼續使用這種損壞的方案將損害系統的安全性,因為很可能會發現哈希沖突。 可能需要讓所有用戶更改其密碼。 這次確保哈希存儲正確。 您可能還需要考慮將它們存儲為十六進制字符串而不是二進制數據,以最大程度地降低出現進一步編碼問題的風險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM