从专业人员到超级专业人员的任何问题 - 1。 - 页 6

 
sergeev:
GetID是动态的吗?

不幸的是,是的,因为参数值可以动态改变,ID必须相应改变。
 

最简单的选择是将整个参数列表转换为一个长字符串,并对该字符串采取MD5.一个较短的哈希函数。

这将使你在参数变化时具有独特性和唯一性以及动态性。

 
是否可以只从外部实现中获取MD5(例如,通过dll),或者有通过MQL4、MQL5实现的变体?
 
sergeev:

当你改变参数时,你会有独特性和不明确性以及动态性。

将没有独特性。
一般来说,长期以来一直建议使用Sha256。
因为有一种算法可以生成指定Md5的密码。
C-4:
是否可以只从外部实现中获取MD5(例如,通过dll),或者有通过MQL4或MQL5实现的变体?
你知道...如果你没有更好的事情可做--当然,在Mql中做吧。
 
C-4:
是否可以只从外部实现中获取MD5(例如,通过dll),或者有通过MQL4、MQL5实现的变体?

我想你可以在网上找到这个算法,例如这里 ,或者维基

 
一般来说...参数和标识符的问题是1:1 java hashCode / equals。
只有当你设法将所有的参数打包成识别器,一切才会如你所愿。
也就是说,散列函数不会给你你想要的东西...
 
jartmailru:
将没有独特性。事实上,早就有人建议改用Sha256。
因为已经创建了一种算法,可以生成一个具有给定Md5的密码。

密码与此有什么关系?:))我们谈论的是一些类的标识符,它是临时创建的,对不同的参数是不同的。

----------

总的来说,C-4,我想,如果一串参数无论如何都会被创建,那么这个哈希值到底有什么意义。:)

只要比较一下这两个字符串。

 
sergeev:

密码与此有什么关系?:))我们谈论的是一些类的标识符,它是在飞行中创建的,对不同的参数是不同的。

我的回答要点:
1)Md5不会给出一个唯一的标识符
1.1)散列函数不能用于任务
2)Md5-不时尚
是的,你只需要一个对比。全部放入一个数组,然后进行二进制搜索:-)。
P.S.: 而且在C++中,你甚至不需要为此写代码...
 


Уникальности не будет.
И вообще уже давно рекомендуют переходить на Sha256,
потому что создан алгоритм, генерирующий пароль с заданным Md5.

要解决这个问题,不需要进行加密保护。重要的是要创造一个独特的指纹。不幸的是,MD5是一个128位的哈希代码。在MQL中没有这种长度的变量类型。所以我可能会在上面实现一个更简单的Adler-32,并让它成为每个类实例的唯一32位ID号的生成器。

s.w. 如果你能详细说明第1.1点。为什么不能这样做?

 
jartmailru:

是的,你只需要一个对比。全部放入一个数组,然后进行二进制搜索:-)。

是的,在这种情况下,我们可以不使用哈希值。

如果这个变体适合瓦西里,我们就把所有的参数放到一个字符串中。这个字符串将是类的标识符。

原因: