对于我的生活,我似乎无法在任何地方找到这个,如果有人甚至可以给我一个链接,我会非常感激.
我们正试图在openLDAP中启用SSHA哈希.默认情况下,它以明文形式存储密码,我认为这是犯罪行为,但是嘿,我是AD的家伙,所以我知道什么.但是如果您愿意的话,您会认为它们可以让您轻松找到打开哈希所需的信息.你不会选择吗?
实际上重新初始化密码并不是那么慢.由于迭代计数,创建密钥本身很慢.
此外,迭代计数被忽略,并且从未在加密本身中使用,仅用于密钥生成.根据所选择的算法,JCE api有点误导
由于Java中的加密技术非常...加密,我正在努力做一些优化.在功能方面,这个类非常有效,我希望它可以作为AES加密使用的一个例子
使用BouncyCastle的AES实现加密和解密数据时出现性能问题(我不比较,这是我测试过的唯一一个实现).实际上这个问题对于我决定使用的任何密码都是通用的.
主要问题是:我可以避免两个密码完全重新初始化每个加密/解密调用吗?它们太贵了
为简单起见,请记住以下代码已删除其异常处理,并进行了大量简化以保持对问题的关注.同步块用于保证线程安全
顺便说一下,欢迎对代码的任何部分进行反馈
谢谢
import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AES {
private static final int ITERATIONS = 120000;
private static final int SALT_SIZE_IN_BYTES = 8;
private static final String algorithm = "PBEWithSHA256And128BitAES-CBC-BC";
private static final byte[] KEY_SALT = "a fixed key salt".getBytes(Charset.forName("UTF-8"));
private Cipher encryptCipher;
private Cipher decryptCipher;
private SecretKey key;
private RandomGenerator randomGenerator = new …Run Code Online (Sandbox Code Playgroud) 使用OpenSSL加密文件时,可以使用-pass pass:mySillyPassword,其中mySillyPassword是加密中使用的密码.此外,可以使用盐,其中-salt -s(十六进制字符串)用于指定盐.
为什么有人想要使用密码而不是盐或与盐一起使用?另外,我理解只使用-salt命令会导致OpenSSL生成salt.这比用户定义的盐更好吗?如果OpenSSL随机生成一个salt,那么用户将来如何知道解密文件的盐是什么?
我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:
现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.
盐是伪随机的,但实际上是基于密码(让我感觉不好?).
散列函数也伪随机地"散布"哈希字符串中的盐.
哈希检查功能反转盐洒,然后进行实际的哈希检查.
现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.
我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.
那么,人们对"最佳方法解决方案"的看法和想法是什么?
在阅读了有关盐密码散列的内容后,我想为管理区域实现一个简单的版本,以便建立一个网站.
如果你有很好的链接代码已经很好地实现了这个想法,如果你能分享,我将不胜感激.
谢谢,
你认为最安全,最安全的方法是什么?我把这些片段从php.net上删除了.我只是想知道,因为人们发布了他们自己,我只是无法理解为什么有些人是他们的方式......有人可以帮助我,并告诉我更多关于这些?哪个最安全,为什么?
1.
<?php
$hash = md5($salt1.$password.$salt2);
?>
Run Code Online (Sandbox Code Playgroud)
2.
<?php
function eliteEncrypt($string) {
// Create a salt
$salt = md5($string."%*4!#$;\.k~'(_@");
// Hash the string
$string = md5("$salt$string$salt");
return $string;
}
?>
Run Code Online (Sandbox Code Playgroud)
3.
<?php
define ('SALT_ONE', 'some_random_123_collection_&$^%_of_stuff');
define ('SALT_TWO', 'another_random_%*!_collection_ANbu_of_stuff');
$password = 'dragon';
function generate_encrypted_password($str) {
$new_pword = '';
if( defined('SALT_ONE') ):
$new_pword .= md5(SALT_ONE);
endif;
$new_pword .= md5($str);
if( defined('SALT_TWO') ):
$new_pword .= md5(SALT_TWO);
endif;
return substr($new_pword, strlen($str), 40);
}
echo generate_encrypted_password($password);
?>
Run Code Online (Sandbox Code Playgroud)
4.
<?
function enchsetenev($toencode,$times)
{
$salt = 's+(_a*'; …Run Code Online (Sandbox Code Playgroud) 我想在我正在处理的网站上添加密码salting,我发现Spring Security 3.1有一些新功能可以让它变得非常容易.
我有一个关于StandardPasswordEncoder类的问题.它的运作方式与我的预期略有不同.使用它比编写盐腌自己看起来更简单,但我认为还有一些我不明白的"魔法".
StandardPasswordEncoder似乎为我随机加盐,这很好.但是在将原始密码与编码密码相匹配时......如何在不知道原始盐是什么的情况下才能匹配密码?
根据我的理解,一旦你制作了盐,你就不能回去......所以如果首先有一个随机的盐来生成编码的哈希值......那么StandardPasswordEncoder如何能够在以后匹配密码点?我很迷惑.我不应该得到盐,将盐保存在数据库中,然后供应盐?没有我存储和提供盐值,它怎么能做到这一点?
谢谢你清理混乱.我希望我的问题有道理.
我正在阅读一本关于如何加密密钥以使您的加密安全的教程,但是无法做很多事情.我对密码学知之甚少,需要一些帮助.我使用commoncrypto来加密文件,并且完成了,除了它不安全的事实...
这就是我所拥有的:
- (NSData *)AES256EncryptWithKey:(NSString *)key
{
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero( keyPtr, sizeof( keyPtr ) ); // fill with zeroes (for padding)
NSLog(@"You are encrypting something...");
// fetch key data
[key getCString:keyPtr maxLength:sizeof( keyPtr ) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus …Run Code Online (Sandbox Code Playgroud) 这到底是做什么的?我试着查一下但没找到任何东西.
询问的原因是我想将SALT byte[]合并到一个随后进行散列的值中.所以它应该像这样(伪代码):
MessageDigest.update(SALT);
MessageDigest.update(value);
digestValue = MessageDigest.digest();
// Where SALT, value and digestValue are array bytes, byte[]
Run Code Online (Sandbox Code Playgroud)
这是否同时添加SALT和value最终摘要,还是应该将两个变量合并为一个然后再合并update一次?
我在任何文件中都找不到答案,任何澄清都将不胜感激.
谢谢,干杯.