anyfile의 randomart를 생성하는 방법은 무엇입니까?

툴랭 코르도바

우리 모두는 공개 키를 ssh-keygen만들거나 유효성을 검사 할 때 생성되는 ASCII randomart를 알고 ssh있습니다.

우리는 또한 당신이 가진 모든 파일의 해시를 생성 할 수 있습니다 알고 sha1sum또는 md5sum.

그러나 공개 ssh 키가 아닌 파일에서 randomart "ssh-keygen-style" 을 생성 할 수 있습니까?

두 파일의 체크섬을 시각적으로 비교하는 더 재미있는 방법입니다.

0x2b3bfa0

nirejan이 만든 이 작은 C 프로그램 으로 임의의 파일 아트를 생성 할 수 있습니다 .

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

#define XLIM 17
#define YLIM 9
#define ARSZ (XLIM * YLIM)

#define DEBUG 0

static uint16_t array[ARSZ];

const char symbols[] = {
    ' ', '.', 'o', '+',
    '=', '*', 'B', 'O',
    'X', '@', '%', '&',
    '#', '/', '^', 'S', 'E'
};

void print_graph(void)
{
    uint8_t i;
    uint8_t j;
    uint16_t temp;

    printf("+--[ RandomArt ]--+\n");

    for (i = 0; i < YLIM; i++) {
        printf("|");
        for (j = 0; j < XLIM; j++) {
            temp = array[j + XLIM * i];
            printf("%c", symbols[temp]);
        }
        printf("|\n");
    }

    printf("+-----------------+\n");
}

static char string[256];

static int ishex (char c)
{
    if ((c >= '0' && c <= '9') ||
        (c >= 'A' && c <= 'F') ||
        (c >= 'a' && c <= 'f')) {
            return 1;
    }

    return 0;
}

/*
 * The hexval function expects a hexadecimal character in the range
 * [0-9], [A-F] or [a-f]. Passing any other character will result in
 * undefined behaviour. Make sure you validate the character first.
 */
static uint8_t hexval (char c)
{
    if (c <= '9') {
        return (c - '0');
    } else if (c <= 'F') {
        return (c - 'A' + 10);
    } else if (c <= 'f') {
        return (c - 'a' + 10);
    }

    return 0;
}

int convert_string(char *arg)
{
    uint16_t i;
    char c;

    i = 0;
    while (*arg && i < 255) {
        c = *arg;
        if (!ishex(c)) {
            printf("Unrecognized character '%c'\n", c);
            return 1;
        }
        arg++;

        string[i] = hexval(c) << 4;

        if (!*arg) {
            printf("Odd number of characters\n");
            return 1;
        }
        c = *arg;

        if (!ishex(c)) {
            printf("Unrecognized character '%c'\n", c);
            return 1;
        }
        arg++;

        string[i] |= hexval(c);
        i++;
    }

    // Add the terminating null byte
    string[i] = '\0';
    return 0;
}

uint8_t new_position(uint8_t *pos, uint8_t direction)
{
    uint8_t newpos;
    uint8_t upd = 1;
    int8_t x0;
    int8_t y0;
    int8_t x1;
    int8_t y1;

    x0 = *pos % XLIM;
    y0 = *pos / XLIM;

    #if DEBUG
    printf("At position (%2d, %2d)... ", x0, y0);
    #endif

    switch (direction) {
        case 0: // NW
            #if DEBUG
            printf("Moving NW... ");
            #endif
            x1 = x0 - 1;
            y1 = y0 - 1;
            break;
        case 1: // NE
            #if DEBUG
            printf("Moving NE... ");
            #endif
            x1 = x0 + 1;
            y1 = y0 - 1;
            break;
        case 2: // SW
            #if DEBUG
            printf("Moving SW... ");
            #endif
            x1 = x0 - 1;
            y1 = y0 + 1;
            break;
        case 3: // SE
            #if DEBUG
            printf("Moving SE... ");
            #endif
            x1 = x0 + 1;
            y1 = y0 + 1;
            break;
        default: // Should never happen
            #if DEBUG
            printf("INVALID DIRECTION %d!!!", direction);
            #endif
            x1 = x0;
            y1 = y0;
            break;
    }

    // Limit the range of x1 & y1
    if (x1 < 0) {
        x1 = 0;
    } else if (x1 >= XLIM) {
        x1 = XLIM - 1;
    }

    if (y1 < 0) {
        y1 = 0;
    } else if (y1 >= YLIM) {
        y1 = YLIM - 1;
    }

    newpos = y1 * XLIM + x1;
    #if DEBUG
    printf("New position (%2d, %2d)... ", x1, y1);
    #endif

    if (newpos == *pos) {
        #if DEBUG
        printf("NO CHANGE");
        #endif

        upd = 0;
    } else {
        *pos = newpos;
    }

    #if DEBUG
    printf("\n");
    #endif

    return upd;
}

void drunken_walk(void)
{
    uint8_t pos;
    uint8_t upd;
    uint16_t idx;
    uint8_t i;
    uint8_t temp;

    pos = 76;
    for (idx = 0; string[idx]; idx++) {
        temp = string[idx];

        #if DEBUG
        printf("Walking character index %d ('%02x')...\n", idx, temp);
        #endif

        for (i = 0; i < 4; i++) {
            upd = new_position(&pos, temp & 3);
            if (upd) {
                array[pos]++;
            }
            temp >>= 2;
        }
    }

    array[pos] = 16; // End
    array[76] = 15; // Start
}

int main(int argc, char *argv[])
{
    if (argc != 2) {
        printf("Usage: bishop <hex string>\n");
        return 1;
    }

    if (convert_string(argv[1])) {
        printf("String conversion failed!\n");
        return 1;
    }

    drunken_walk();
    print_graph();

    return 0;
}

사용하려면 다음 단계를 따르십시오.

  1. 파일에 소스 코드를 넣으십시오.
    • gedit 또는 자주 사용하는 텍스트 편집기를 엽니 다.
    • 위의 소스 코드를 붙여 넣으십시오.
    • 파일을 bishop.c.
  2. 실행중인 코드를 컴파일하십시오 gcc bishop.c -o bishop.
  3. 임의의 파일 아트보기 ( myfile파일 위치) :

    ./bishop $(sha512sum myfile | cut -f1 -d ' ')
    
  4. 임의의 파일 아트를 보려면 사용자 지정 스크립트를 만듭니다.

    • 존재하지 않는 경우 로컬 바이너리 폴더를 만듭니다.

      sudo mkdir -p /usr/local/bin
      
    • 스크립트를 사용하여 해당 폴더에 파일을 만듭니다.

      sudo touch /usr/local/bin/randomart
      
    • 파일에 대한 권한을 부여하십시오.

      sudo chmod 777 /usr/local/bin/randomart
      
    • 실행 gedit /usr/local/bin/randomart하여 파일을 편집하고 다음을 붙여 넣으십시오.

      #!/bin/bash
      
      bishop $(sha512sum "$@" | cut -f1 -d ' ')
      
    • 파일을 저장하십시오.

    • 이전 단계에서 빌드 한 프로그램을 로컬 바이너리 폴더에 복사합니다.

      sudo cp bishop /usr/local/bin/
      
    • 바이너리에 실행 권한을 부여합니다.

      sudo chmod a+x /usr/local/bin/bishop
      
  5. 파일이있는 randomart myfile위치에서 실행중인 새로 만든 프로그램을 사용 myfile합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

임의의 UIColor를 생성하는 방법은 무엇입니까?

분류에서Dev

특정 숫자의 난수를 생성하는 방법은 무엇입니까?

분류에서Dev

Date를 확장하는 클래스의 생성자를 정의하는 방법은 무엇입니까?

분류에서Dev

임의의 두 개의 동심 구체 합성 데이터를 생성하는 방법은 무엇입니까?

분류에서Dev

Java 특정 숫자를 제외하는 임의 생성기를 추가하는 방법은 무엇입니까?

분류에서Dev

C ++에서 임의의 대문자 문자 생성기를 작성하는 방법은 무엇입니까?

분류에서Dev

List <int>의 값이 될 수없는 임의의 INT를 생성하는 방법은 무엇입니까?

분류에서Dev

패턴과 일치하는 일련의 숫자를 생성하는 방법은 무엇입니까?

분류에서Dev

속성에서 특정 ID의 XPath를 생성하는 방법은 무엇입니까?

분류에서Dev

미리 정의 된 * 고유성 *으로 정수 시퀀스를 생성하는 방법은 무엇입니까?

분류에서Dev

공통 속성을 가진 두 노드 간의 관계를 생성하는 방법은 무엇입니까?

분류에서Dev

SQL 데이터베이스에없는 임의의 정수를 생성하는 방법은 무엇입니까?

분류에서Dev

동적으로 생성 된 입력 값의 합계를 계산하는 방법은 무엇입니까?

분류에서Dev

일부 테이블의 생성 날짜를 새 테이블에 삽입하는 방법은 무엇입니까?

분류에서Dev

Thread 생성자에서`args`를 정의하는 더 좋은 방법은 무엇입니까?

분류에서Dev

NoSQL / DynamoDB에 대해 낮은 문자의 기본 키를 생성하는 방법은 무엇입니까?

분류에서Dev

PHP에서 16 길이의 난수를 생성하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

R : 각 행에서 가장 높은 값의 벡터를 생성하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 많은 소수의 난수를 생성하는 방법은 무엇입니까?

분류에서Dev

키워드를 생성하는 방법은 무엇입니까?

분류에서Dev

새 GUID를 생성하는 방법은 무엇입니까?

분류에서Dev

색상 표를 생성하는 방법은 무엇입니까?

분류에서Dev

Module.symvers를 생성하는 방법은 무엇입니까?

분류에서Dev

SQL 쿼리를 생성하는 방법은 무엇입니까?

분류에서Dev

이 생성자를 적절한 방식으로 정의하는 방법은 무엇입니까?

분류에서Dev

Java의 옵션으로 임의의 비밀번호를 생성하는 방법은 무엇입니까?

분류에서Dev

Google 시트에서 반복되는 일련의 숫자를 생성하는 방법은 무엇입니까?

분류에서Dev

밀도 플롯에 의해 생성되는 레벨 수를 제한하는 방법은 무엇입니까?

분류에서Dev

범위에서 반복되지 않는 3 개의 난수를 생성하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    임의의 UIColor를 생성하는 방법은 무엇입니까?

  2. 2

    특정 숫자의 난수를 생성하는 방법은 무엇입니까?

  3. 3

    Date를 확장하는 클래스의 생성자를 정의하는 방법은 무엇입니까?

  4. 4

    임의의 두 개의 동심 구체 합성 데이터를 생성하는 방법은 무엇입니까?

  5. 5

    Java 특정 숫자를 제외하는 임의 생성기를 추가하는 방법은 무엇입니까?

  6. 6

    C ++에서 임의의 대문자 문자 생성기를 작성하는 방법은 무엇입니까?

  7. 7

    List <int>의 값이 될 수없는 임의의 INT를 생성하는 방법은 무엇입니까?

  8. 8

    패턴과 일치하는 일련의 숫자를 생성하는 방법은 무엇입니까?

  9. 9

    속성에서 특정 ID의 XPath를 생성하는 방법은 무엇입니까?

  10. 10

    미리 정의 된 * 고유성 *으로 정수 시퀀스를 생성하는 방법은 무엇입니까?

  11. 11

    공통 속성을 가진 두 노드 간의 관계를 생성하는 방법은 무엇입니까?

  12. 12

    SQL 데이터베이스에없는 임의의 정수를 생성하는 방법은 무엇입니까?

  13. 13

    동적으로 생성 된 입력 값의 합계를 계산하는 방법은 무엇입니까?

  14. 14

    일부 테이블의 생성 날짜를 새 테이블에 삽입하는 방법은 무엇입니까?

  15. 15

    Thread 생성자에서`args`를 정의하는 더 좋은 방법은 무엇입니까?

  16. 16

    NoSQL / DynamoDB에 대해 낮은 문자의 기본 키를 생성하는 방법은 무엇입니까?

  17. 17

    PHP에서 16 길이의 난수를 생성하는 가장 좋은 방법은 무엇입니까?

  18. 18

    R : 각 행에서 가장 높은 값의 벡터를 생성하는 방법은 무엇입니까?

  19. 19

    파이썬에서 많은 소수의 난수를 생성하는 방법은 무엇입니까?

  20. 20

    키워드를 생성하는 방법은 무엇입니까?

  21. 21

    새 GUID를 생성하는 방법은 무엇입니까?

  22. 22

    색상 표를 생성하는 방법은 무엇입니까?

  23. 23

    Module.symvers를 생성하는 방법은 무엇입니까?

  24. 24

    SQL 쿼리를 생성하는 방법은 무엇입니까?

  25. 25

    이 생성자를 적절한 방식으로 정의하는 방법은 무엇입니까?

  26. 26

    Java의 옵션으로 임의의 비밀번호를 생성하는 방법은 무엇입니까?

  27. 27

    Google 시트에서 반복되는 일련의 숫자를 생성하는 방법은 무엇입니까?

  28. 28

    밀도 플롯에 의해 생성되는 레벨 수를 제한하는 방법은 무엇입니까?

  29. 29

    범위에서 반복되지 않는 3 개의 난수를 생성하는 방법은 무엇입니까?

뜨겁다태그

보관