与C#'的Rfc2898DerivedBytes的Java等价物
我想知道是否有人试图做 Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(secret, saltValueBytes); byte[] secretKey = key.GetBytes(16); 在Java中.秘密是字符串(密码),而saltvaluebytes是字节数组中的盐. 我已经尝试过一些东西,但似乎无法缠绕我的头. 解决方案 我找到了此实现通过Google搜索,但我从未使用过它. RFC 2898的免费Java实施 /pkcs#5 pbkdf2 似乎没有小而自由 可用的Java实施RFC 2898/PKCS#5可用.小如 只有几个源文件, 编译和无依赖项,免费 在lgpl. 鉴于HMACSHA1的可用性 标准的Sun JCE密码学 提供者,这样的实施是 非常简单,可以从 RFC描述很字面意思. 我的代码是一个干净的实施 仅以RFC为基础. 其他解决方案 我知道这是游戏的晚期,但是J
4 2024-01-22
编程技术问答社区
RFC2898DeriveBytes是如何生成AES密钥的?
我看到了一些代码 string password = "11111111"; byte[] salt = Encoding.ASCII.GetBytes("22222222"); Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt); RijndaelAlg.Key = key.GetBytes(RijndaelAlg.KeySize / 8); 我可以看到钥匙是由带有密码和盐的RFC2898DeriveBytes生成的.然后AES通过getBytes检索钥匙. 但问题是,RFC2898DeriveBytes做什么,getBytes(cb)做什么?任何人都可以阐述这个吗?我无法从文档中得到它. 解决方案 RFC2898是指2000年9月发布的基于密码的加密规范.有效地,Rfc2898DeriveBytes采用密码和盐来生成密钥.它使用的方法称为PBKDF2(基于密码的键推导功能#2),并在R
2 2024-01-19
编程技术问答社区
将.Net解密转换为Java
目前,我正在从事一个项目,在该项目中,他们使用rfc2898派生字节的AES加密.这是我提供的解密方法.现在我需要在Java中实现它. private string Decrypt(string cipherText) { string EncryptionKey = "MAKV2SPBNI657328B"; cipherText = cipherText.Replace(" ", "+"); byte[] cipherBytes = Convert.FromBase64String(cipherText); using (Aes encryptor = Aes.Create()) { Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x
2 2024-01-19
编程技术问答社区
如何在VBScript中使用AES加密?
我希望使用 vbscript 使用特定键和我看着 capicom ;它仅允许使用密码,并且不允许设置特定的键和IV值. 解决方案 一种方法是在不需要外部添加的COM对象或包装器中声明VBScript中的加密类.以下示例使用rijndael托管类进行字符串,加密和解密: '----------------------------------------------------- Dim obj,arr,i,r,str,enc,asc dim bytes,bytesd,s,sc,sd set obj=WScript.CreateObject("System.Security.Cryptography.RijndaelManaged") Set asc = CreateObject("System.Text.UTF8Encoding") s="This is a private message" bytes=asc.GetBytes_4(s) obj.GenerateKey()
8 2024-01-19
编程技术问答社区
JavaScript。如何像C#一样生成Rfc2898DeriveBytes?
编辑:在评论中的讨论中,让我澄清一下,这将发生在SSL后面的服务器方面.我不打算向客户端公开Hashed密码或哈希方案. 假设我们具有带有默认表(ASPNET_USERS,ASPNET_ROLES等)的现有ASP.NET身份数据库.根据我的理解,密码哈希算法使用SHA256并将盐 +(哈希密码)存储为基本64编码字符串. 编辑:此假设不正确,请参见下面的答案. 我想复制microsoft.aspnet.Identity.crypto class'Let's say that a password is welcome1 and its asp.net hashed password is ADOEtXqGCnWCuuc5UOAVIvMVJWjANOA/LoVy0E4XCyUHIfJ7dfSY0Id+uJ20DTtG+A== 到目前为止,我已经能够重现获得盐和存储子键的方法的部分. c#实施或多或少地做到这一点: var salt = new byte[Sal
12 2023-02-09
编程技术问答社区
使用Rfc2898DeriveBytes在C#中实现PBKDF2
大家,我正在尝试在C#中实现PBKDF2函数,该功能创建WPA共享密钥.我在这里找到了一些: http://msdn.microsoft美国/杂志/cc163913.aspx 这似乎产生了有效的结果,但这是一个字节太短...和错误的PSK值. 要测试输出,我将其进行比较: http://www.xs4all . 我确实找到了一种将其与内置库一起使用的方法,可以c#c#rfc2898deriveBytes.使用此功能,我使用以下方式获得有效的输出: Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096); byte[] answers = k3.GetBytes(32); 现在,我使用RFC2898DeriveBytes的一个限制是"盐"必须长8个.如果较短,RFC2898DeriveBytes会引发异常.我想我要做的就是将盐(如果较短)添加到8个字节,我会很好.但不是!我已经尝试了几乎所有的
46 2023-02-07
编程技术问答社区
与C#'的Rfc2898DerivedBytes的Java等价物
我想知道是否有人试图做 Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(secret, saltValueBytes); byte[] secretKey = key.GetBytes(16); 在Java中.秘密是字符串(密码),而saltvaluebytes是字节阵列中的盐. 我已经尝试过一些东西,但似乎无法缠绕我的头. 解决方案 我找到了此实现通过Google搜索,但我从未使用过它. RFC 2898的免费Java实施 /pkcs#5 pbkdf2 似乎没有小而自由 RFC的可用Java实施 2898/PKCS#5可用.小如 只有几个源文件, 编译和无依赖性,免费 在lgpl. 鉴于HMACSHA1的可用性 标准的Sun JCE密码学 提供者,这样的实施是 非常简单,可以从 RFC描述很字面意义. 我的代码是一个干净的实施 仅以RFC为基础. 其他解决方案 我知道这是游戏的晚期,但是J
36 2023-02-07
编程技术问答社区
为什么我需要使用Rfc2898DeriveBytes类(在.NET中)而不是直接使用密码作为密钥或IV?
使用RFC2898DeriveBytes和仅使用Encoding.ASCII.GetBytes(string object);? 有什么区别 我在两种方法方面都取得了相对成功,前者是一种更长时间的方法,因为后者很简单,而且要点.两者似乎都可以最终做同样的事情,但是我正在努力看到使用前者在后者上使用前者的意义. 我能够掌握的基本概念是您可以将字符串密码转换为 字节阵列用于例如对称加密类,AesManaged.通过RFC类,但是在创建RFC对象时,您可以使用盐值和密码.我认为它更安全,但仍然充其量是没有受过教育的猜测!它还使您可以返回一定尺寸的字节阵列,类似的东西. 这里有一些例子,可以向您展示我来自哪里: byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password"); 或 string password = "P@%5w0r]>"; byte[] saltArray = Encoding.AS
28 2023-02-06
编程技术问答社区
RFC2898DeriveBytes在Java中的实现
我必须解密在C#中加密的字符串,作为我们项目的一部分.使用AES算法和填料模式作为PKCS7完成此解密.为了生成初始化向量,他们使用了以下内容: Rfc2898DeriveBytes keyGenerator = new Rfc2898DeriveBytes("somestring", salt); 盐是默认字节. 此IV用于使用AES加密字符串. 我已经阅读了一些文档,发现AE可以在Java中实现.但不确定如何通过IV和包装模式. 另外,我已经看到有CBC的模式,欧洲央行用于提及密码块模式.我不确定C#对应方中使用了哪种模式. 以下是C# 中的代码 /// Method to encrypt the plain text based on the key and Iv /// /// /// ///
16 2023-01-03
编程技术问答社区
PasswordDeriveBytes vs Rfc2898DeriveBytes, 过时但更快
我正在基于从对称性词(例如三倍,des等)的类中进行加密功能. 基本上,有两个选项可以生成一致的键,而我的算法类别PasswordDeriveBytes和Rfc2898DeriveBytes都从derivebytes摘要类中继承. PasswordDeriveBytes.GetBytes()方法在.NET框架中标记为已过时,而RFC2898DeriveBytes.getBytes()建议使用匹配PBKDF2标准.但是,根据我的测试,在RFC2898DeriveBytes类中调用相同的GetBytes()方法的速度几乎是PasswordDeriveBytes类中的速度差15倍,这会导致意外的CPU使用(始终高于50%). . 这里有一些测试数据: 迭代:100 算法类型:DES 原始文本:"我是测试键,请加密我" 时间: passwordDeriveBytes:99ms RFC2898DeriveBytes:1,373ms 基于测试,Rfc28
36 2022-09-10
编程技术问答社区
为了保证密码哈希的安全,盐需要是随机的吗?
我对安全性知之甚少(我需要找到有关基础知识的基本解释),并且正在尝试提出一种合理的方法来使用 .Net 将用户密码存储在数据库中. 这是我目前的解决方案: private static byte[] HashPassword(string password) { using (var deriveBytes = new Rfc2898DeriveBytes(password, 10)) { byte[] salt = deriveBytes.Salt; byte[] key = deriveBytes.GetBytes(20); return salt.Concat(key).ToArray(); //Return Salt+Key } } 我将 HashPassword() 的结果存储在数据库中.要检查用户的密码,我这样做: var salt = //1st 10 bytes stored in the DB
174 2022-08-04
编程技术问答社区
为什么hash_pbkdf2(PHP)的输出与.NET/C#的实现不同?
在我的一个小项目中,我需要计算函数的哈希. 我有php hash 的工作示例 $pass = "123456"; $mysalt = strrev($pass); echo hash_pbkdf2('sha1', $pass, $mysalt, 1000, 32); //using the PHP inbuilt function echo ""; include_once('PasswordHash.php'); echo pbkdf2('sha1', $pass, $mysalt, 1000, 16); //using external code 它们中的两个都有相同的输出:523d904c8f2df96634d9eed3b444838e 现在我需要我的代码向后与C#兼容,因为密码将由PHP服务器验证.并且该请求将由C#应用程序发送. 这是我尝试的:输出= 8e59ead5f90c6af11cf80641d51c241c public s
672 2022-07-19
编程技术问答社区
PasswordDeriveBytes vs Rfc2898DeriveBytes, 过时但更快
我正在基于从SymmetricalGorithm(如TripleDes,DES等)继承的类的加密功能. 基本上有两个选项可以为我的算法类生成一致的密钥和iv,两个继承来自派世器的抽象类. PasswordDeriveBytes.GetBytes()方法在.NET Framework中被标记为Obsolete,而建议使用RFC2898DeriveByTes.getBytes(),因为它与PBKDF2标准匹配.但是,根据我的测试,在RFC2898DERIVEBYTES类中调用相同的GetBytes()方法速度慢于PasswordDeriveBytes类慢,这导致意外的CPU使用率(总是高于50%). 这里的一些测试数据: 迭代:100 算法类型:des 原文:"我是一个测试密钥,加密我请" 时间: passwordderivebytes:99ms RFC2898DeriveBytes:1,373ms 基于测试,生产环境中Rfc2898DeriveByt
1578 2022-07-19
编程技术问答社区