Bash зацикливание и хеширование значений в скрипте - PullRequest
2 голосов
/ 12 февраля 2020

Иметь ~ 600 слов. Имейте Google Sheet, в котором ~ 600 слов находятся как в столбцах (что-то вроде B1: AV1), так и в строках (что-то вроде A2: A640). Вся середина объединяет слово строки, пробел и слово столбца. Простой пример того, как это выглядело бы, если бы оно было 4x:

Just an example image of what this would look like

Я пытаюсь получить сумму SHA-256 для каждой комбинации слов, чтобы найти два слова вошли в окончательное значение, которое у меня есть (и я пытаюсь сопоставить комбо с).

Друг сказал мне, что лучший способ go об этом - загрузить электронную таблицу и затем использовать bash скрипт для итерации по каждому элементу листа и возврата комбинации слов, если / когда он находит сумму ha sh, которая соответствует сумме, с которой я пытаюсь ее сопоставить.

Пожалуйста, помогите !

1 Ответ

0 голосов
/ 12 февраля 2020

Вы не указали какой язык, поэтому я выбираю python, который мне наиболее знаком, а библиотеки замечательные.

Вы можете сделать следующее:

import itertools
import hashlib

words = ["the","quick","brown","fox"]

all_permutations = [p for p in itertools.product(words, repeat=2)]

# The hash is calculated from the both words joined with a space e.g. 'brown fox'
hashes = {hashlib.sha256(" ".join(permutation).encode('utf-8')).hexdigest():permutation for permutation in all_permutations}

hash_to_look_for = 'fb565eb6a7d52f851e9c3ffdcf2ff1b78fff40b6f5afeb8efa4be231ba987409'

print(hashes[hash_to_look_for])

, которые генерируют вывод:

('quick', 'fox')

Как это работает:

  1. Указать список слов words = ["the","quick","brown","fox"] Конечно, вы можете также сгенерировать этот список слов из файла, в Интернете достаточно «How-To» / Stackoverflow
  2. Генерация всей перестановки (которая в основном является вашей таблицей nxn) ). all_permutations = [p for p in itertools.product(words, repeat=2)]
  3. Создание хранилища значений ключей (словаря) с ключом ха sh и значением перестановки: hashes = {hashlib.sha256(" ".join(permutation).encode('utf-8')).hexdigest():permutation for permutation in all_permutations} В основном у вас есть словарь со следующими записями: {'9324c764e9cd717efd7c30d439dc0ce9cf7ecff6b6b00a67eb24676ba3bc34ba': ('the', 'the') всего nxn раз (в примере 16 записей)
  4. Я указываю га sh, который мы ищем: hash_to_look_for = 'fb565eb6a7d52f851e9c3ffdcf2ff1b78fff40b6f5afeb8efa4be231ba987409'
  5. Поскольку ха sh всегда является ключом в нашем словаре, мы можем легко распечатать его с помощью этой команды: hashes[hash_to_look_for] и получить желаемую перестановку, которая генерирует это га sh.
...