Tag: cryptojs

JavaScript:如何生成像C#这样的Rfc2898DeriveBytes?

编辑:在评论中的每次讨论中,让我澄清一下,这将发生在SSL后面的服务器端。 我不打算将散列密码或散列方案暴露给客户端。 假设我们有一个现有的asp.net身份数据库,其中包含默认表(aspnet_Users,aspnet_Roles等)。 根据我的理解,密码散列算法使用sha256并将salt +(散列密码)存储为base64编码的字符串。 编辑:这个假设不正确,请参阅下面的答案。 我想用JavaScript版本复制Microsoft.AspNet.Identity.Crypto类’ VerifyHashedPassword函数的function。 假设密码是welcome1 ,其asp.net哈希密码是ADOEtXqGCnWCuuc5UOAVIvMVJWJANOA / LoVy0E4XCyUHIfJ7dfSY0Id + uJ20DTtG + A == 到目前为止,我已经能够重现获取salt和存储的子键的方法部分。 C#实现或多或少地执行此操作: var salt = new byte[SaltSize]; Buffer.BlockCopy(hashedPasswordBytes, 1, salt, 0, SaltSize); var storedSubkey = new byte[PBKDF2SubkeyLength]; Buffer.BlockCopy(hashedPasswordBytes, 1 + SaltSize, storedSubkey, 0, PBKDF2SubkeyLength); 我在JavaScript中有以下内容(任何方面都不优雅): var hashedPwd = “ADOEtXqGCnWCuuc5UOAVIvMVJWjANOA/LoVy0E4XCyUHIfJ7dfSY0Id+uJ20DTtG+A==”; var hashedPasswordBytes = new Buffer(hashedPwd, ‘base64’); var saltbytes = […]

使用C#和CryptoJS进行不同的加密结果

我在服务器应用程序中使用AES加密一些数据,这是用C#编写的。 我使用预定义的密钥(32字节)和IV(16字节),例如…… Key: 81fe1681..6a451c1c IV: e83c..ae76 这是我用来加密数据的C#代码: async Task Encrypt(string privateKey, string pin, byte[] data) { using (var sha = SHA256.Create()) { byte[] keyHash = sha.ComputeHash(Encoding.UTF8.GetBytes($”{privateKey}”)); byte[] pinHash = sha.ComputeHash(Encoding.UTF8.GetBytes($”{pin}”)); using (Aes aes = Aes.Create()) { byte[] key = keyHash.Slice(0, aes.Key.Length); byte[] iv = pinHash.Slice(0, aes.IV.Length); using (ICryptoTransform transform = aes.CreateEncryptor(key, iv)) using (var stream […]