我正在尝试实现AES自定义密码加密,并希望了解下面的代码。
我不太理解为什么需要指定密钥大小256“pbekeyspec(password,salt,65536,256)”,而我已经使用了“pbkdf2withHMACSHA256”,它应该生成256位的SecretKey。
并且在使用我的密码+salt生成密钥之后,为什么我需要将它与SecretKeySpec作为AES算法关联起来。
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
为什么需要指定密钥大小256
PBKDF2是一个灵活的基于口令的密钥派生函数。它使用一个底层哈希函数,并进行多次迭代。它可以输出您想要的任何大小的键。即使在生成AES-128密钥时使用SHA-256也是很常见的,因为SHA-256不知道被破坏了,而且与MD5和SHA-512(仅在x64上)等其他哈希函数相比,它的速度相对较慢。对于PBKDF来说,速度慢是一个重要的因素,因为它直接影响到攻击者在尝试强行输入密码时。当然,您也有可调的迭代计数。
此外,PBKDF2可以输出比底层散列函数输出大小更多的密钥材料。例如,通常要求PBKDF2的输出包含IV。在您的情况下,输出应该是384位长。
如果您希望使用cipher
实例使用AES加密某些内容,则需要传入一个java.security.key
对象,该对象将在运行时解析为AES。为此使用键#getAlgorithy()
方法。如果在创建SecretKeySpec
时没有指定“AES”
,则会得到InvalidKeyException
。
我想做一个简单的应用程序加密/解密与AES的消息。我的代码似乎现在工作,因为我得到的文本加密和解密没有任何问题。 我有一个输入字段、一个输入密码用于解密/加密的字段和一个输出字段。和两个按钮(加密/解密)。 问题是****,当我输入一条消息,设置密码并对其进行加密,然后试图引发无效的密码获取时,尽管输入的密码与我用于加密的密码不匹配,但消息还是会解密。 下面是我的密钥生成代码: 这里是我加密消息的
我想用AES加密实现一个自定义密钥,我找到了下面的实现和细节。 但我有以下几点疑虑: 如果我要使用典型的示例代码,例如: null https://www.securecoding.cert.org/confluence/display/java/msc61-j.+do+not+use+insecure+or+weak+cryptographic+算法 如何在Java中生成SALT值?
null 我很困惑,我应该选择哪种方法?我不知道这两种方法的利弊。
本文向大家介绍SpringBoot Shiro配置自定义密码加密器代码实例,包括了SpringBoot Shiro配置自定义密码加密器代码实例的使用技巧和注意事项,需要的朋友参考一下 shiro主要有三大功能模块: 1. Subject:主体,一般指用户。 2. SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。(类似于SpringMVC中的Dispatch
我正在尝试在Go中加密数据,并使用带有PKCS7填充的AES CBC模式在Angular中解密。但是当我尝试在Angular中解密数据时,它没有返回任何内容 Go代码: Angular/CryptoJs代码: 我从加密JS解密方法中得到一个空响应。 cryptoJS的iv值应该是多少?
我试图在Android和PHP端使用AES加密/解密数据,并累犯空答案。 首先,我在Android中生成了对称密钥: 在服务器端,我试图解密数据。我可以解密(从RSA)秘密的AES密钥,并得到它的字符串表示。在客户端(Android)和服务器端(PHP)上是一样的。但是如何使用这个字符串AES密钥来解密数据呢?我尝试了这个(PHP): PHP中的结果: 怎么啦?