Криптографический хеш (sha1 или md5) данных, данных как строка в Mathematica

прежде чем запросы выполняются против набора данных, они проведены через оптимизатор запросов, оптимизатор пытается организовать запрос таким способом, что это может удалить столько же кортежей (строки) от набора результатов так быстро, сколько это может. Часто при использовании подзапросов (особенно плохие), кортежи не могут быть сокращены из набора результатов, пока внешний запрос не начинает работать.

С наблюдением запрос его твердое для высказывания, что было так плохо об оригинале, но мое предположение будет им, было чем-то, что оптимизатор просто не мог сделать намного лучше. Выполнение 'объясняет', покажет Вам метод оптимизаторов для получения данных.

5
задан dreeves 6 December 2009 в 05:59
поделиться

2 ответа

Вы можете сделать это менее сложно, используя StringToStream и тот факт, что FileHash может принимать входной поток в качестве аргумента. Тогда ваша функция sha1 станет:

sha1[s_String] := Module[{stream = StringToStream[s], hash},
  hash = FileHash[stream,"SHA"];
  Close[stream];
  hash]
6
ответ дан 14 December 2019 в 04:39
поделиться

Вот работающий кладж. Запишите строку во временный файл и используйте FileHash :

sha1[s_String] := Module[{stream, file, hash},
  stream = OpenWrite[];
  WriteString[stream, s];
  file = Close[stream];
  hash = FileHash[file, "SHA"];
  DeleteFile[file];
  hash]

Вы также можете определить

hex = IntegerString[#, 16]&;

и вернуть hex @ hash в приведенной выше функции.

2
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: