相关疑难解决方法(0)

我应该选择哪种加密哈希函数?

.NET框架附带了6种不同的散列算法:

  • MD5:16字节(哈希时间500MB:1462毫秒)
  • SHA-1:20个字节(1644毫秒)
  • SHA256:32字节(5618毫秒)
  • SHA3​​84:48字节(3839毫秒)
  • SHA512:64字节(3820毫秒)
  • RIPEMD:20个字节(7066毫秒)

每个功能都有不同的表现; MD5是最快的,RIPEMD是最慢的.

MD5的优势在于它适用于内置的Guid类型; 它是3型UUID的基础.SHA-1哈希是类型5 UUID的基础.这使得它们非常易于识别.

然而,MD5易受碰撞攻击,SHA-1也容易受到攻击,但程度较轻.

在什么条件下我应该使用哪种散列算法?

我真的很想回答的具体问题是:

  • MD5不值得信任吗?在正常情况下,当您使用没有恶意意图的MD5算法且没有任何第三方有任何恶意意图时,您会期望任何冲突(意味着两个任意byte []产生相同的哈希)

  • RIPEMD比SHA1好多少?(如果它更好)它的计算速度要慢5倍,但散列大小与SHA1相同.

  • 散列文件名(或其他短字符串)时获得非恶意冲突的几率是多少?(例如,2个具有相同MD5哈希值的随机文件名)(使用MD5/SHA1/SHA2xx)一般来说,非恶意冲突的几率是多少?

这是我使用的基准:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void …
Run Code Online (Sandbox Code Playgroud)

.net c# hash cryptography cryptographic-hash-function

135
推荐指数
3
解决办法
7万
查看次数

随机几乎没有随意?

我这样做是为了测试randint的随机性:

>>> from random import randint
>>>
>>> uniques = []
>>> for i in range(4500):  # You can see I was optimistic.
...     x = randint(500, 5000)
...     if x in uniques:
...         raise Exception('We duped %d at iteration number %d' % (x, i))
...     uniques.append(x)
...
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
Exception: We duped 887 at iteration number 7
Run Code Online (Sandbox Code Playgroud)

我尝试了大约10倍以上,我得到的最好结果是在转发器之前迭代了121次.这是您从标准库中获得的最佳结果吗?

python random birthday-paradox

74
推荐指数
8
解决办法
4万
查看次数

在PHP中生成随机密钥的最佳方法是什么?

我正在寻找创建一个可重用的函数,它将生成一个随机密钥,其中包含所选长度的可打印ACSII字符(从2到1000+不等).我认为可打印的ASCII字符是33-126.它们的键不需要是完全唯一的,只要在完全相同的毫秒时生成就是唯一的(因此uniqid()不起作用).

我正在考虑组合chr()mt_rand()可能有效.

这是要走的路,还是其他最好的方法?

编辑: uniqid()也不会工作,因为它没有长度参数,它只是PHP给你的东西.

我的想法:这就是我想出的:

function GenerateKey($length = 16) {
    $key = '';

    for($i = 0; $i < $length; $i ++) {
        $key .= chr(mt_rand(33, 126));
    }

    return $key;
}
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?

另一个编辑:大多数其他问题涉及密码生成.我希望有一个更广泛的角色,我不关心1VS l.我想要可能的最大数量的键.

注意:生成的密钥不一定必须是加密安全的.

php random

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

Sql Server - nvarchar字段的索引

保持nvarchar字段唯一的好方法是什么.我有一个存储mp3文件网址的字段.url长度可以是10个字符到4000之间的任何值.我试图创建一个索引,它说它不能创建索引,因为总长度超过900个字节.

如果该字段未编入索引,则搜索任何内容的速度都会很慢.我正在使用c#,asp.net mvc作为前端.

问候

Paraminder

sql sql-server nvarchar

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

Java中最简单的方法是将String转换为UUID

如何从String生成有效的UUID?单独的字符串不是我正在寻找的.相反,我正在寻找类似哈希函数的东西,将任何String转换为有效的UUID.

java uuid

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

md5假阳性校验和的可能性有多大?

我有一个客户端在内部分发大型二进制文件.他们还传递文件的md5校验和,并在用作工作流程的一部分之前显然根据校验和验证文件.

然而,他们声称"经常"他们在文件中遇到腐败,其中md5仍然说该文件是好的.

我读过的所有内容都表明这应该是非常不可能的.

听起来有可能吗?另一种哈希算法会提供更好的结果吗?我是否应该查看流程问题,例如他们声称要检查校验和,但不是真的这样做?

NB,我还不知道在这种情况下"经常"意味着什么.他们每天处理数百个文件.我不知道这是每日,每月还是每年发生.

checksum md5

8
推荐指数
3
解决办法
4680
查看次数

唯一ID序列的哈希函数(UUID)

我将消息序列存储在数据库中,每个序列可以包含多达N消息.我想创建一个散列函数,它将表示消息序列,并且如果消息序列存在,则能够更快地检查.

每条消息都有一个区分大小写的字母数字通用唯一ID(UUID).考虑(M1, M2, M3)使用ids 跟踪消息 -

M1 - a3RA0000000e0taBB M2 - a3RA00033000e0taC M3 - a3RA0787600e0taBB

消息序列可以是

Sequence-1 : (M1,M2,M3) Sequence-2 : (M1,M3,M2) Sequence-3 : (M2,M1,M3) Sequence-4 : (M1,M2) Sequence-5 : (M2,M3) ...等等...

以下是用于存储消息序列的数据库结构示例

在此输入图像描述

给定消息序列,我们需要检查数据库中是否存在该消息序列.例如,检查数据库中是否存在消息序列,M1 -> M2 -> M3即UID (a3RA0000000e0taBB -> a3RA00033000e0taC -> a3RA0787600e0taBB).

我想创建一个哈希函数来代替扫描表中的行,而哈希函数用哈希值表示消息序列.使用表中的哈希值查找应该更快.

我的简单哈希函数是 - 在此输入图像描述

我想知道什么是最佳散列函数用于存储消息序列散列更快是存在检查.

algorithm hash hash-function data-structures

7
推荐指数
1
解决办法
1806
查看次数

在bash中查找重复文件的时间复杂性

我今天必须编写一个Bash脚本来删除重复文件,使用它们的md5哈希值.我将这些哈希值存储为临时目录中的文件:

for i in * ; do
    hash=$(md5sum /tmp/msg | cut -d " " -f1) ;
    if [ -f /tmp/hashes/$hash ] ;
    then
        echo "Deleted $i" ;
        mv $i /tmp/deleted ;
    else
        touch /tmp/hashes/$hash ;
    fi ;
done
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但让我想知道:这是一种节省时间的方法吗?我最初想过将MD5哈希存储在一个文件中,但后来我想"不,因为检查给定的MD5是否在这个文件中需要每次都重新读取它".现在,我想知道:使用"在目录中创建文件"方法时它是一样的吗?当同一目录中有大量文件时,Bash [-f]是否检查线性或准常量复杂度?

如果它取决于文件系统,那么tmpfs的复杂性是多少?

bash time-complexity tmp tmpfs

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

Memcached密钥生成从参数到函数

这个问题类似于一个关于java的问题,但我在php中这样做,所以我不认为它有资格作为重复.

我想要一种在调用此函数时生成确定性键的方法.该函数应该像读取缓存一样运行.如果密钥存在,则检索数据.如果没有,调用函数存储数据,然后返回它.

这是我拥有的,它的工作原理,但我不确定它是否安全,如果它的确定性足够甚至足够独特,因为我对这些主题完全没有理解.

// $call = function being called $args = arguments to that function
// $force = force cache to bypassed, then updated
public function cachedCall($call,$args = [],$force = false)
{
    $cache = \App\App::getInstance()->cache;
    $key = md5($call) . md5(serialize($args));
    $res = $cache->get($key);
    if($res === -1 || $force){
        $res = call_user_func_array([$this,$call],$args);
        if(!empty($res) && $res !== false && $res !== 0 && !is_null($res)){
            $cache->set($key,$res,0); //never set empty data in the cache.
        }
    }
    return $res;
}
Run Code Online (Sandbox Code Playgroud)

我的问题只涉及计算密钥的第三行.你可以看到它是由被调用的函数和要提供给该函数的参数计算的.我在某些情况下发生了碰撞.我正在寻找改进它的方法,因此它更有用,哈希是一致的但不太可能发生冲突.第三个参数可以忽略,因为它只是一种强制缓存被绕过的方法.

如何调用此函数的示例:

$data …

php memcached md5

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

使用MD5校验和在多个硬盘上搜索重复文件是否安全?

我的任务是整合大约15年的实验室记录,其中大部分是学生作业或原始数据.我们正在谈论100,000多个人工生成的文件.

我的计划是编写一个Python 2.7脚本,它将映射整个目录结构,为每个目录结构创建校验和,然后标记重复项以进行删除.我预计可能会有10-25%的重复.

我的理解是MD5碰撞在理论上是可能的,但是这不太可能,这实际上是一个安全的程序(假设如果发生1次碰撞,我的工作将是安全的).

这是一个安全的假设吗?如果实现很重要,我打算使用的唯一Python库是:

  • hashlib 校验和;
  • sqlite 用于数据处理结果;
  • os 用于目录映射

python checksum md5

4
推荐指数
1
解决办法
2447
查看次数