相关疑难解决方法(0)

散列和加密算法之间的根本区别

我看到哈希和加密算法之间存在很多混淆,我希望听到一些更专业的建议:

  1. 何时使用哈希与加密

  2. 什么使哈希或加密算法不同(从理论/数学水平),即什么使哈希不可逆(没有彩虹树的帮助)

以下是一些类似的 SO问题,没有像我想要的那样详细说明:

混淆,散列和加密有什么区别?
加密和散列之间的区别

security encryption hash cryptography

494
推荐指数
10
解决办法
20万
查看次数

为什么String中的Java hashCode()使用31作为乘数?

每Java文档中,哈希代码String对象被计算为:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)

使用int算术,其中s[i]是 字符串的第i个字符,是字符串n的长度,并^指示取幂.

为什么31用作乘数?

我知道乘数应该是一个相对较大的素数.那么为什么不是29岁,37岁,甚至97岁?

java string algorithm hash

461
推荐指数
11
解决办法
14万
查看次数

Swift中数组,集合和字典的区别

我是Swift Lang的新手,看过很多教程,但目前还不清楚 - 我的问题是Array,SetDictionary集合类型之间的主要区别是什么?

arrays collections dictionary set swift

18
推荐指数
3
解决办法
2万
查看次数

如何从文件中获取唯一的文件标识符

在您将此问题标记为重复之前,请阅读我写的内容。我已经在很多页面上检查了许多问题以寻求解决方案,但找不到任何东西。在我当前的应用程序中,我正在使用以下代码:

using (var md5 = MD5.Create())
{
    using (FileStream stream = File.OpenRead(FilePath))
    {
        var hash = md5.ComputeHash(stream);
        var cc = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
        Console.WriteLine("Unique ID  : " + cc);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于小型文件,这对我来说已经足够好了,但是一旦我尝试使用大文件,就花了大约30-60秒的时间来获取文件ID。

我想知道是否有其他方法可以通过使用或不使用哈希或流从文件中获得独特的东西?我的目标机器不是一直都是NTFS或Windows,因此我不得不寻找另一种方法。

我想知道是否仅从流中获取第一个“ x”个字节并使用该较小尺寸的流对唯一ID进行哈希处理是否有意义?

编辑:这不是为了安全或其他事情,我需要这个唯一的ID,因为FileSystemWatcher无法正常工作:)

EDIT2:基于评论,我决定更新我的问题。我之所以这样做,可能是因为存在一个不基于为文件创建唯一ID的解决方案的原因。我的问题是我必须观看文件夹并在发生事件时触发事件;A)新添加的文件B)更改的文件C)删除的文件

我不能使用FileSystemWatcher的原因是不可靠。有时我将100x文件放到该文件夹​​中,而FileSystemWatcher仅触发20x-30x事件,如果它是网络驱动器,则有时可能会更低。我的方法是将所有文件及其唯一ID保存到文本文件中,并每5秒检查索引文件是否有任何更改。如果没有像18GB这样的大文件,它就可以正常工作。.但是计算40GB文件的哈希值花费的时间太长了。.我的问题是:当我正在观看的文件夹发生问题时,如何触发事件

EDIT3:设置赏金后,我意识到我需要提供有关代码中发生的事情的更多信息。首先,这是我对用户@JustShadow的回答(时间太长,因此我无法将其发送为评论)我将解释如何做到这一点,我将filepath-uniqueID(MD5哈希值)保存在文本文件中,每隔5秒检查一次Directory.GetFiles(DirectoryPath)的文件夹;然后我将第一个列表与5秒钟前的列表进行比较,这样我得到2个列表

List<string> AddedList = FilesInFolder.Where(x => !OldList.Contains(x)).ToList();
List<string> RemovedList = OldList.Where(x => !FilesInFolder.Contains(x)).ToList();
Run Code Online (Sandbox Code Playgroud)

这就是我得到它们的方式。现在我有了if块

if (AddedList.Count > 0 && RemovedList.Count == 0) 那很好,不重命名新文件。我哈希所有新文件并将其添加到我的文本文件中。

if (AddedList.Count == 0 && RemovedList.Count > 0)
Run Code Online (Sandbox Code Playgroud)

首先,如果还是不错的话,只有被删除的项目相反,我将其从文本文件中删除并完成。在这种情况下,出现了我的else块..这是我进行比较的地方,基本上,我对所有添加和删除的列表项进行哈希处理,然后将两个列表中都存在的项进行哈希处理,例如在此将a.txt重命名为b.txt如果我的列表的两个计数都将大于零,那么将被触发。在其他内部,我已经知道一个哈希值(它在我5秒钟前创建的文本文件中),现在我将其与所有AddedList元素进行比较,看看是否可以匹配它们,如果没有匹配项,那就是重命名情况匹配,那么我可以说自上次扫描以来b.txt确实已被新添加到列表中。我还将提供一些我的类代码,因此也许有办法解决这个难题。

现在,我还将分享一些我的类代码,也许当每个人都知道我在做什么时,我们可以找到一种解决方法。这是我的计时器的样子

private void TestTmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {

            lock (locker)
            { …
Run Code Online (Sandbox Code Playgroud)

c#

15
推荐指数
1
解决办法
465
查看次数

如何检查解密是否成功?

当使用openssl库中的blowfish算法时,可以加密和解密任何数据.

此外,任何数据都可以使用任何密钥加密(解密)\ iv.openssl无法判断解密是否成功.这只是一些数学变革.

那么,我该怎么做才能确保加密成功:一些数据是用相同的密钥/ iv解密的,它是加密的?

我应该在解密后应该检查的数据前面添加一些MAGIC字节吗?

encryption openssl

10
推荐指数
1
解决办法
4665
查看次数

获取文件SHA256哈希码和校验和

以前我问了一个关于组合SHA1 + MD5 的问题,但之后我理解计算SHA1然后延迟文件的MD5并不比SHA256快.在我的情况下,4.6 GB文件大约需要10分钟,在Linux系统中使用默认实现SHA256和(C#MONO).

public static string GetChecksum(string file)
{
    using (FileStream stream = File.OpenRead(file))
    {
        var sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(stream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我读了这个主题,并以某种方式根据他们所说的改变我的代码:

public static string GetChecksumBuffered(Stream stream)
{
    using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
    {
        var sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(bufferedStream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

但它没有这样的感情,需要大约9分钟.

然后我尝试通过sha256sumLinux中的命令测试我的文件中的相同文件,它需要大约28秒,上面的代码和Linux命令都给出相同的结果!

有人建议我阅读Hash Code和Checksum之间的区别,然后我会谈到这个解释差异的主题.

我的问题是:

  1. 是什么导致上述代码和Linux之间的这种不同sha256sum? …

c# mono checksum hashcode sha256

6
推荐指数
2
解决办法
1万
查看次数

什么是CA证书,为什么我们需要它?

我刚刚阅读了有关什么是HTTPS服务的文章,并了解了https的基本知识。

请求https内容时,服务器将向浏览器发送公钥,以便每次浏览器接收到的数据都将使用公钥解密。

我的问题是什么是CA证书?我们为什么需要它?

ssl pki x509

6
推荐指数
3
解决办法
4591
查看次数

基于python中的文件内容创建唯一键

我有很多很多文件要上传到服务器,我只想要一种方法来避免重复.

因此,从一个大字符串生成一个唯一的小键值似乎是校验和要做的事情,并且散列看起来就像是它的演变.

所以我打算使用hash md5来做到这一点.但后来我在某处读到"MD5并不是唯一的密钥",我觉得这很奇怪.

这样做的正确方法是什么?

编辑:顺便说一句,我采取了两个 来源来实现以下目标,这就是我目前正在做的事情,并且它的工作正常,使用Python 2.5:

import hashlib

def md5_from_file (fileName, block_size=2**14):
    md5 = hashlib.md5()
    f = open(fileName)
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    f.close()
    return md5.hexdigest()
Run Code Online (Sandbox Code Playgroud)

python hash checksum cryptography unique-key

5
推荐指数
1
解决办法
5834
查看次数