为什么PasswordDeriveBytes和Rfc2898DeriveBytes产生不同的结果?

时间:2016-06-06 20:32:36

标签: c# encryption

我曾经使用以下代码来获取使用SHA1的密码衍生物:

string passPhrase = "Pas5pr@se";        
string saltValue = "s@1tValue";        
string hashAlgorithm = "SHA1";             
int passwordIterations = 2;      

PasswordDeriveBytes password = 
    new PasswordDeriveBytes (passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);

然后我通过执行以下操作来获取字节:

var bytes = password.GetByes(32);

我看到我应该使用Rfc2898DeriveBytes代替。所以我现在将其替换为:

Rfc2898DeriveBytes password1 = new Rfc2898DeriveBytes(passPhrase, saltValueBytes, passwordIterations);

但是当我这样做时:

 var bytes = password.GetBytes(32);

我没有得到相同的价值观。任何线索?

1 个答案:

答案 0 :(得分:3)

initialize(int stage){ ... mobility = TraCIMobilityAccess().get(getParentModule()); assert(mobility); traci = mobility->getCommandInterface(); traciVehicle = mobility->getVehicleCommandInterface(); ... } ... reroute(std::list<std::string> rList){ bool rota; rota = traciVehicle->changeVehicleRoute(rList); std::cout << rota << findHost()->getFullName() << std::endl; } 使用PBKDF2,而Rfc2898DeriveBytes使用PBKDF1的修改版本。它们彼此不兼容。

鉴于这是一个MACing函数,您也无法将它们从一个转换为另一个。

如果您想开始使用Rfc2898DeriveBytes,您只需要为新数据执行此操作,并继续使用PasswordDeriveBytes获取旧数据或用户密码。