Convert hex to base64

Convert hex to base64


题目

https://cryptopals.com/sets/1/challenges/1

C++

#include <bits/stdc++.h>
using namespace std;
char *bin(char s[], int l, int y); //将十六进制 转换为二进制
void base(char b[], int v);        //二进制转换为base64并输出
int main()
{
    char a[] = {"49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"};
    int size = sizeof(a) - 1; //判断多少位十六进制数
    char *m;
    m = bin(a, size, 1);
    base(m, 4 * size);
    system("pause");
    return 0;
}
char *bin(char s[], int l, int y) //将十六进制 转换为二进制
{
    int e;
    char aaa[100];
    //将十六进制数利用ASCII分别与十进制整数对应并存储到数组中
    for (e = 0; e < l; e++)
    {
        if (s[e] <= 'f' && s[e] >= 'a')
            aaa[e] = int(s[e]) - 87;
        else
            aaa[e] = int(s[e]) - 48;
    }
    static char ss[3][1000];
    //十六进制的组合从0到e(15),4个二进制数字表示十进制数字
    char as[] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1};
    int x = 0, v = 0, k;
    //将十进制数转换为二进制存入数组中
    do
    {
        k = 0;
        while (k < 4)
        {
            int c;
            c = 4 * aaa[x] + k;
            ss[y][v++] = as[c];
            k++;
        }
        x++;
    } while (x < l);
    return ss[y];
}
void base(char b[], int v) //二进制转换为base64并输出
{
    int i = 0, n = 0, q = 0;
    char s[100];
    //将二进制每六位一组转换成十进制数
    while (1)
    {
        n = 2 * n + b[i++];
        if (i % 6 == 0 || i == v)
        {
            s[q++] = n;
            n = 0;
            if (i == v)
                break;
        }
    }
    printf("十六进制数转换成base64为:\n");
    //将十进制数利用ASCII分别与base64的字符对应,然后输出
    for (i = 0; i < q; i++)
    {
        if (s[i] <= 25 && s[i] >= 0)
            printf("%c", s[i] + 65);
        else if (s[i] >= 26 && s[i] <= 51)
            printf("%c", s[i] + 71);
        else if (s[i] >= 52 && s[i] <= 61)
            printf("%c", s[i] - 4);
        else if (s[i] == 62)
            printf("%c", s[i] - 19);
        else
            printf("%c", s[i] - 16);
    }
    printf("\n");
}

Python——调用base64工具包

import base64
msg = '49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d'
s = bytes.fromhex(msg)  # 将hex的数据转换为str,并以Byte 形式存储
ans = base64.b64encode(s)  # base64编码后的形式
print(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值