{"id":23527470,"url":"https://github.com/marcelo-schreiber/beale-ciphers","last_synced_at":"2026-06-24T06:34:31.086Z","repository":{"id":154825327,"uuid":"620929227","full_name":"marcelo-schreiber/beale-ciphers","owner":"marcelo-schreiber","description":"Decode and encode beale ciphers in the command line.","archived":false,"fork":false,"pushed_at":"2023-04-27T01:00:29.000Z","size":214,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-14T10:22:29.205Z","etag":null,"topics":["beale","ciphers","command-line","decode","encode"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcelo-schreiber.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-03-29T16:42:59.000Z","updated_at":"2023-05-04T21:22:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"678ed5bb-3cf1-447f-8ff7-7b91627dc744","html_url":"https://github.com/marcelo-schreiber/beale-ciphers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marcelo-schreiber/beale-ciphers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-schreiber%2Fbeale-ciphers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-schreiber%2Fbeale-ciphers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-schreiber%2Fbeale-ciphers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-schreiber%2Fbeale-ciphers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcelo-schreiber","download_url":"https://codeload.github.com/marcelo-schreiber/beale-ciphers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-schreiber%2Fbeale-ciphers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34720920,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beale","ciphers","command-line","decode","encode"],"created_at":"2024-12-25T20:14:24.860Z","updated_at":"2026-06-24T06:34:31.070Z","avatar_url":"https://github.com/marcelo-schreiber.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Arquivo LEIAME contendo nome e GRR do aluno,\ntexto explicando resumidamente os módulos criados,\nas estruturas de dados e os algoritmos usados.  --\u003e\n\n\u003c!-- Marcelo Augusto Rissette Schreiber - 20220063 --\u003e\n\n# Módulos criados\n\n## `src/`\n\n- `beale.c`: arquivo principal do programa, contém a função `main()`.\n- `encode.c`: contém a função `encodeByBook()`, que codifica uma mensagem\n  a partir de um livro usando a cifra de Beale.\n- `decode.c`: contém a função `decodeByBook()`, que decodifica uma mensagem\n  a partir de um livro usando a cifra de Beale. Além disso, contém a função\n  `decodeByKeys()`, que decodifica uma mensagem a partir de um arquivo de chaves\n  usando a cifra de Beale.\n- `utils.c`: contém as definições de funções auxiliares usadas em `encode.c`\n  e `decode.c`. `arrIdxToChar()` e `charToArrIdx()` são funções auxiliares para a\n  conversão de índices de arrays para caracteres e vice-versa.\n- `linkedlist.c`: contém as definições de funções auxiliares para a implementação\n  de uma lista encadeada, usada para armazenar as chaves de decodificação.\n  Ou seja, contém as definições de funções para criar, inserir, remover, imprimir\n  em um arquivo e liberar uma lista encadeada.\n\n## `include/`\n\n- `encode.h`: contém as definições de funções e estruturas de dados usadas em `encode.c`.\n- `decode.h`: contém as definições de funções e estruturas de dados usadas em `decode.c`.\n- `utils.h`: contém as definições de funções e estruturas de dados usadas em `utils.c`.\n- `linkedlist.h`: contém as definições de funções e\n  estruturas de dados usadas em `linkedlist.c`.\n\n# Estruturas de dados\n\n## `linkedlist.c`\n\nA estrutura de dados escolhida para armazenar as chaves de decodificação foi uma\nlista encadeada, pois a inserção de uma chave na lista é feita em tempo\nconstante, pois há um ponteiro para o final da lista. Além disso, a lista\nencadeada é bem simples de ser implementada, e não há um limite para o\nnúmero de elementos que podem ser armazenados na lista e, principalmente,\npermite a separação de blocos de memória.\n\n# Algoritmos\n\n## `encode.c`\n\n### `encodeByBook()`\n\n1. Ler o livro e armazenar em uma lista de tamanho fixo dos caractéres\n   ASCII imprimíveis (32 a 126). Cada elemento é uma lista encadeada de chaves\n   de cada caractere. Ou seja, a lista de tamanho fixo é um array de listas encadeadas.\n\n2. Para cada caractere da mensagem original, escolher uma chave aleatória da\n   lista de chaves do caractere correspondente no livro.\n\n3. Escrever as chaves escolhidas em um arquivo de chaves.\n\n4. Escrever a mensagem codificada em um arquivo.\n\n## `decode.c`\n\n### `decodeByKeys()`\n\n1. Ler o arquivo de chaves e armazenar em uma string de tamanho dinâmico,\n   tal caractere na posição cada chave. Ex.:\n\n```python\na: 0 1 5 3\nb: 2 4 6\n```\n\nSerá armazenado como a string `\"aababab\"`. Assim, cada caractere da string é uma\nchave de decodificação, isso permite que a decodificação seja feita em tempo constante.\n\n2. Utilizando a string de chaves, decodificar a mensagem codificada e escrever\n   em um arquivo (-1 sendo espaço em branco e -2 uma nova linha). Ex.:\n\n```text\n0 -1 2 -2 0 1 5 6\n```\n\nCom a string de chaves `\"aababab\"`, será decodificado como:\n\n```text\na b\naab\n```\n\n3. Escrever a mensagem decodificada em um arquivo.\n\n### `decodeByBook()`\n\n1. Ler o livro e armazenar em uma string de tamanho dinâmico, tal caractere na\n   posição cada chave. Ex.:\n\n```text\nEra uma vez um rei que tinha um filho muito esperto. Um dia, o rei perguntou ao filho:\n```\n\nSerá armazenado como a string `\"EuvurqtufmeUdorpaf\"`. Caracteres especiais são ignorados.\n\n2. Repetir o processos 2 e 3 do algoritmo `decodeByKeys()`.\n\n# Compilação e execução\n\n- `make`: compila o programa.\n- `make test`: executa o programa de teste (codifica e\n  decodifica das 2 maneiras)\n- `make check`: verifica se a mensagem original coincide com ambos os arquivos\n  decodificados (de maneira diferente) pela codificação.\n- `make clean`: limpa os arquivos `.o` gerados pela compilação.\n- `make purge`: limpa todos os arquivos gerados pela compilação e\n  os arquivos de teste.\n\n\u003c!-- Para compilar o programa, basta executar o comando `make` na pasta\n raiz do projeto. Pode-se testar o programa executando o comando `make test`\n  na pasta raiz do projeto e `make check` para verificar se a mensagem original\n  coincide com ambos os arquivos decodificados (de maneira diferente)\n  pela codificação. Para limpar os arquivos `.o` gerados pela compilação,\n  basta executar o comando `make clean` na pasta raiz do projeto e `make purge`\n  para limpar todos os arquivos gerados pela compilação e os arquivos de teste. --\u003e\n\n# Aluno e GRR do aluno\n\nMarcelo Augusto Rissette Schreiber - GRR20220063\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelo-schreiber%2Fbeale-ciphers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcelo-schreiber%2Fbeale-ciphers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelo-schreiber%2Fbeale-ciphers/lists"}