Prolog:md5谓词

时间:2015-10-14 07:12:10

标签: prolog md5 swi-prolog

我正在尝试编写一个insert into @temp_traffic_reports(id, assetname,datestamp,messagetype,itemquantity) ( select tf.ID as id, ta.TrackingIdentityName COLLATE SQL_Latin1_General_CP1_CI_AS as assetname , DATEADD(hour,@TimeZoneValue,Datestamp) as datestamp , 'Poll for position report' as messagetype, '1' as itemquantity FROM trackmaps_WHB.dbo.MESForwardMessage tf join @temp_assets ta on tf.TerminalID = ta.TrackingIndentity where Datestamp between DATEADD(hour,@TimeZoneValue,@fDate) and DATEADD(hour,@TimeZoneValue,@tDate) 谓词来验证以下内容:

md5

这种谓词的真实实例是

md5("my string", "my md5").

我查看了文档,我发现了这个:http://www.swi-prolog.org/pldoc/doc_for?object=crypt/2

md5("long live and prosper", "bf1835ce984d2a97d31409394fe00e9a").

无论如何,我无法让它发挥作用。我确定我错过了一些东西,因为我在prolog中很新。任何提示?

修改

为了更好的解释,我假设创建一个类似于此的子句:

?- phrase("$1$", E, _),
   crypt("My password", E),
   format('~s~n', [E]).

由于

(Prolog实施:Mac OSX El Capitan上的swi-prolog)

2 个答案:

答案 0 :(得分:2)

虽然已弃用,但您正在寻找的功能是available

?- use_module(library(semweb/rdf_db)).
true.

?- rdf_atom_md5("long live and prosper", 1, MD5).
MD5 = bf1835ce984d2a97d31409394fe00e9a.

答案 1 :(得分:1)

在SWI-Prolog中也有

  

library(md5): MD5 hashes从Prolog计算MD5哈希值   串。这是一个等待更多的短期解决方案   OpenSSL的libcrypto函数的通用接口。

     

(这个的子章节是md5_hash)。

这位于SWI-Prolog C-library内,必须使用use_module(library(md5)).

加载

...不幸的是,这对我的Fedora 24不起作用.RPM包pl-7.2.3-3.fc24.x86_64似乎不完整。没有文件/usr/lib64/swipl-7.2.3/library/md5.pl,确实:

?- use_module(library(md5)).
ERROR: source_sink `library(md5)' does not exist

WHY !!

另一方面,我们有模块“sha”(/usr/lib64/swipl-7.2.3/library/sha.pl)。因为我只想要一个哈希值,这似乎已经足够了:

  

library(sha): SHA1 and SHA2 Secure Hash Algorithms:图书馆   library(sha)提供FIPS批准的Secure Hash Algorihms(联邦法院)   信息处理标准)。

好的,所以:

?- use_module(library(sha)).
true.

?- sha_hash("Beyond the Aquila Rift",H,[algorithm(sha256),encoding(utf8)]),hash_atom(H,Hex).
H = [122, 123, 130, 89, 90, 210, 207, 106, 48|...],
Hex = '7a7b82595ad2cf6a30c2ee66672f53e0d630d4c8742d914e73c6761edc9186d2'.

?- sha_hash("Beyond the Aquila Rift",H,[algorithm(sha1),encoding(utf8)]),hash_atom(H,Hex).
H = [7, 152, 27, 81, 140, 122, 225, 76, 238|...],
Hex = '07981b518c7ae14cee70563d87d56db53656232c'.

在降噪!