我需要扰乱我们拥有的UAT数据库中所有用户的名称和登录.(因为数据保护法)
然而,有一个问题.
测试人员仍然需要能够使用散列登录名登录
因此,如果用户登录是"Jesse.J.James",那么散列应该是类似的
Ypois.X.Qasdf
即大致相同的长度,点在同一个地方
所以MD5,sha1等不合适,因为它们会创建非常长的字符串,并且还会添加自己的特殊字符,例如+和=,这是验证正则表达式所不允许的.
所以我正在寻找一些如何实现这一目标的建议
我想我需要自己进行散列算法
有人做过类似的事吗?
我正在使用c#,但我想这对算法来说并不那么重要
非常感谢
添加 -
感谢所有的答案.我认为当不需要做的事情时,我使用"哈希"这个词来解决混淆
如何在GUID上执行AES加密?
在客户端计算机上,我们将存储GUID及其公钥,我们的内部服务器将具有私钥及其guid.
这是生成AES加密的所有必要输入吗?
我正在使用JAVA我的朋友使用SYMBIAN
我和我的朋友有相同的rsa模数.如果我使用公钥加密数据,那么我的朋友能够解密相同的数据.但如果我的朋友使用公钥加密数据,那么我无法解密数据.我收到一个错误,因为"数据必须从零开始"
public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] encryptionByte = null;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
encryptionByte = cipher.doFinal(encrptdByte);
return encryptionByte;
}
public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
byte[] encryptionByte = null;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
encryptionByte = cipher.doFinal(encrptdByte);
System.out.println("Recovered String ::: " + new String(encryptionByte));
}
Run Code Online (Sandbox Code Playgroud)
谢谢Sunil
有人可以用非常慢的术语告诉我这两行PHP之间的区别吗?
$hassh = base64_encode(sha1($word));
$hassh = hash(’sha1?, $word);
Run Code Online (Sandbox Code Playgroud) 我正在尝试解码由Yahoo Messenger生成的DAT文件,该文件看起来类似于我通过在记事本中打开exe生成的下面的文本:
‹
‹N€9 tè…ÀtäÿFöt‹FŠ ‹V‹NˆÿFÿNëÿFH‰F3À9Ft9Ft ö…³ ;Øtsj÷ël;Øt%‹F‹N¶Dÿj Pÿ5@aÐMè5 …À„þÿÿ…Ûuƒ} tÇEø jEPÿvÿvÿuøÿ5DaÐMÿÐM…Àu,ÿÐM=Y tjðë…ÛtjöXë<3Àf‹F,ÇF. ‰Eë‹E‹N…Étÿv2PÿÑëƒ~$ t
‹N(f‰ƒF(ÿF 3À‰F_[É ÌÌÌÌ̃ù
u<r<Ÿ
Run Code Online (Sandbox Code Playgroud)
我曾尝试一些在线工具,有一个像吹鱼,DES各种加密算法,MD5 1路和其他正常的加密像莱特说,腐烂-13等,但我发现生成的文本是正常的可读性,但不是原来的一个.我认为它的AES或RSA或Triple DES.实际上我正在研究一个实用程序,它将读取本地的Yahoo Messengers存档.但是当我打开本地时,我发现了一个DAT文件,上面有加密文本.
(UPDATE)
根据venkyduded文章"雅虎使用简单的XOR算法对消息进行编码(以确保安全性!)".关于XOR逆转的任何良好链接.
任何帮助将受到高度赞赏.
修改我的"问题",以免惹恼当地人.
现在互联网上似乎有这么多资源(包括SO),找到问题的"答案"可能很容易,但如何判断答案是否有效甚至是最新的?
特别是一个领域和一个被问到很多的领域是如何使用PHP正确处理散列和加密,以便在数据库存储中做好准备.关于SO的一个常见答案似乎总是"你有没有访问过php.net?".虽然我理解这通常会出现一个问题,其中有人问最简单的问题,但我已经开始发现一些描述似乎有冲突,更重要的是,用户示例已经过时(很多来自2008-2009).
例如:在寻找为什么以及如何使用密码哈希时:http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash
总之,我了解到sha1和md5是快速且计算效率高的哈希方法,它们不再适用于密码哈希.建议的方法是使用crypt()函数.
在了解有关crypt()以及特别是河豚哈希的更多信息时,页面上列出的规则如下:
http://www.php.net/manual/en/function.crypt.php
进一步阅读给出了一个例子:
<?php
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
似乎同一页面上的示例不遵循它刚刚告诉我们使用的规则("$ 2a $ 07 $"之后的26个字符.
回报是:
河豚:
$ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e ./ U9C8sBjqp8I90dH6hi
实际上,字符串本身确实会被改变,但几乎我的整个SALT值(上面提到的前22个字符)都是敞开的.难道这不会让我更简单地确定我的实际字符串是什么吗?
更重要的是,这只是一个例子,但最终,依赖PHP.net等资源应该有多大?
正如我的朋友Mugatu曾经说过"我觉得我正在服用疯狂的药片".
注意:上面提到的页面是自我原始发布以来编辑的,所以我无法保证自从我的原始问题和示例提供后事情没有改变.
我可能犯了一个我看不到的小错误。也许其他人看看这个可以找出我做错了什么。
这是C#我试图重写的函数Go,目标是在调用函数时输出相同的值。
public static string NewEncrypt(string Input)
{
RijndaelManaged rijndaelManaged = new RijndaelManaged();
rijndaelManaged.KeySize = 256;
rijndaelManaged.BlockSize = 256;
rijndaelManaged.Padding = PaddingMode.PKCS7;
rijndaelManaged.Key = Convert.FromBase64String(Convert.ToBase64String(Encoding.UTF8.GetBytes("095fc90fe8b18e8f243e4b07a9c0d170")));
rijndaelManaged.IV = Convert.FromBase64String(Convert.ToBase64String(Encoding.UTF8.GetBytes("8bef55a546d27958ead1fdddba4d36ea")));
ICryptoTransform transform = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);
byte[] myArray = null;
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write))
{
byte[] bytes = Encoding.UTF8.GetBytes(Input);
cryptoStream.Write(bytes, 0, bytes.Length);
}
myArray = memoryStream.ToArray();
}
return Convert.ToBase64String(myArray);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方式调用它:
NewEncrypt("{\"randJsonList\":[ \"abc\" ], \"name\":\"baron\", \"support\":\"king\"}")
Run Code Online (Sandbox Code Playgroud)
我们有这个返回输出(myArray):
DdSUyoYRYW/zDNSVaA1JZ39WqJt06qp0FiJUlCW5BbZWEt41GzsmtgVnGZuHigZNs7qKhI+kHAKMXL8EPnK1vg== …Run Code Online (Sandbox Code Playgroud) 使用以下命令对文件进行加密:
openssl enc -aes-256-cbc -in file.txt -out file_enc.txt -k 1234567812345678
Run Code Online (Sandbox Code Playgroud)
使用以下命令解密该文件:
openssl enc -d -aes-256-cbc -in file_enc.txt -out file.txt -k 1234567812345678
Run Code Online (Sandbox Code Playgroud)
在java中打印盐和密钥后我得到:
密钥=b796fbb416732ce13d39dbb60c0fb234a8f6d70e49df1c7e62e55e81d33a6bff774254ac99268856bf3afe0b95defdad
在 cmd 中我得到:
盐=2D7C7E1C84BD6693密钥=B796FBB416732CE13D39DBB60C0FB234A8F6D70E49DF1C7E62E55E81D33A6BFF
=774254AC99268856BF3AFE0B95DEFDAD
运行后:
openssl enc -aes-256-cbc -in file.txt -out file_enc.txt -pbkdf2 -k 1234567812345678 -p
我正在使用以下代码,但正在打印加密文件:
public static void main(String args[]) throws InvalidKeySpecException,
NoSuchAlgorithmException,
IllegalBlockSizeException,
InvalidKeyException,
BadPaddingException,
InvalidAlgorithmParameterException,
NoSuchPaddingException,
IOException {
String password = "1234567812345678";
String algorithm = "AES/CBC/PKCS5Padding";
IvParameterSpec ivParameterSpec = AESUtil.generateIv();
Resource resource = new ClassPathResource("file_enc.txt");
File inputFile = resource.getFile();
byte[] salt = …Run Code Online (Sandbox Code Playgroud)