1. 程式人生 > >CTF-base64加解密

CTF-base64加解密

base64

是一種編碼方式。把3個8bit變成4個6bit。然後不足補0,符號是’=’. 然後還有一張表。

測試

ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=
輸出:
flag{THE_FLAG_OF_THIS_STRING}

程式碼

解密

#include <iostream>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <string> using namespace std; char str[1010]; char dict(int x,bool flag) { if(x == 0) { if(flag) return '='; else return 'A'; } else if(x < 26) { return 'A' + x; } else if(x < 52) { return 'a' + x - 26; } else if(x < 62
){ return '0' + x - 52; } else if(x == 63) return '+'; else return '/'; } char refdict(char x) { if(x >= 'A' && x <= 'Z') { return x - 'A'; } else if(x >= 'a' && x <= 'z') { return x - 'a' + 26; } else if(x >= '0' && x <= '9'
) { return x - '0' + 52; } else if(x == '+') return 63; else if(x == '/') return 64; else if(x == '=') return 0; } int main() { while(gets(str)) { string ans = ""; int len = strlen(str); for (int i = 0;i + 3 < len;i += 4) { int num = 0; for (int j = 0;j < 4;j ++) { num = (num << 6) + refdict(str[i * 4 + j]); } string tmp = ""; for (int j = 0;j < 3;j ++) { int val = num & 0x000000ff; num >>= 8; tmp = char(val) + tmp; } ans = ans + tmp; } cout << ans << endl; } }

加密

#include <iostream>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <string>
using namespace std;

char str[1010];
char dict(int x,bool flag) {
    if(x == 0) {
        if(flag) return '=';
        else return 'A';
    }
    else if(x < 26) {
        return 'A' + x;
    }
    else if(x < 52) {
        return 'a' + x - 26;
    }
    else if(x < 62){
        return '0' + x - 52;
    }
    else if(x == 63) return '+';
    else return '/';
}

int main() {
    freopen("in.txt","r",stdin);

    while(gets(str)) {
        cout << str << endl;
        string ans = "";
        int len = strlen(str);
        int newlen = ((len + 2) / 3 ) * 3;
        for (int i = len;i < newlen;i ++) {
            str[i] = 0;
        }
        str[newlen] = '\0';

        for (int i = 0;i + 2 < newlen;i += 3) {
            int num = (int)str[i + 2] + (((int)str[i + 1]) << 8) + (((int)str[i]) << 16);
            string tmp = "";
            for (int j = 3;j >= 0;j --) {
                int cur = num & 0x0000003f; //i * 24 + j * 6
                tmp = dict(cur,i * 24 + j * 6 >= len) + tmp;
                num >>= 6;
            }
            ans = ans + tmp;
        }
        cout << ans << endl;
    }
}






相關推薦

CTF-base64解密

base64 是一種編碼方式。把3個8bit變成4個6bit。然後不足補0,符號是’=’. 然後還有一張表。 測試 ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR3

JavaScript Base64解密

style 應用 fun decode turn a-z abcde dex log Base64加密算法是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規範。Base64編碼可用於在HTTP環境下傳遞

Base64 解密類的使用

create esc ble nba val sub break while one /** * Created by Administrator on 2017/12/2 0002. */import java.io.UnsupportedEncodingExceptio

python3中base64解密

import base64 payload = "select * from workbasic" b =base64.b64encode(payload.encode('utf-8')).decode("utf-8") print(b) # 'c2VsZWN0ICogZnJvbSB3b3JrY

Java Base64 解密

public class base64EncryAndDecry { public static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; public sta

Base64解密C++

 BASE64.CPP #include "BASE64.h" static const CHAR* DATA_BIN2ASCII = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+

BASE64解密

- JDK 自帶 - Commons Codec  地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi - Bouncy Castle 地址:https://www.bouncycastle.or

delphi MD5加密,BASE64解密

hash 單元 ext 應該 form proc free 第三方 delphi MD5需要引入system.Hash,BASE64需要引入System.NetEncoding,這兩個單元應該只有高版本的DELPHI IDE才有(貌似XE5以上版本才有)。如果是D7的話,找

android中的MD5、Base64、DES/3DES/ADES解密

tid log str dpa enc csdn 長度 ttext public MD5摘要算法: <span style="font-size:18px;

python3url編解碼base64編解碼ASE解密

字元編解碼 Python3相對於Python2的一大改變就是,對預設字元型別進行了修改。Python2中定義字串預設為二進位制字串,強制加字首u的才是unicode字串;而Python3中字串預設為unicode,強制加字首b的才是二進位制字串。(也就是剛好反過來了) 這裡的二進位制字串:指

c語言通過openssl aes對稱解密base64編解碼將密碼儲存成密文

今天遇到這樣一個問題,將客戶端中的一個密碼儲存到檔案中以供下次使用,但是儲存的密碼不能直接儲存明文,需要進行加密處理,再三考慮之後,這個加密的過程需要雙向的可逆的過程,MD5等方式是不適用的,因為記住密碼意味著下次我還需要還原這個密碼進行使用,所以最後選擇了openssl的aes演算法,然而ae

資料解密基礎知識介紹,及Java實現Base64加密

加密流程涉及的一些關鍵詞: 明文:準備加密的資訊 加密:把明文處理為密文的過程 加密演算法:具體實現明文轉為密文的演算法 加密金鑰:通過加密演算法進行加密操作需要的金鑰 密文:被加密的明文 解密:將密文轉為明文的過程 解密演算法:具體實現密文轉為明文的演算法 解

nodejs aes解密128演算法,base64編碼

function encryption(data) { var iv = ""; var clearEncoding = 'utf8'; var cipherEncoding = 'base64'; var cipherChun

php base64編碼 解密 手動實現

GB_2312 字符集是目前最常用的漢字編碼標準。在這個標準中,每個漢字用2個位元組來表示,每個位元組的ascii碼為 161-254 (16 進位制A1 - FE),第一個位元組 對應於 區碼的1-94 區,第二個位元組 對應於位碼的1-94 位。漢字的unicode 編碼

【JAVA】常用解密演算法總結及JAVA實現【BASE64,MD5,SHA,DES,3DES,AES,RSA】

BASE64 這其實是一種編解碼方法,但是隻要我們能夠將原文變成肉眼不可識別的內容,其實就是一種加密的方法。 BASE64 的編碼都是按字串長度,以每 3 個 8 bit 的字元為一組,然後針對每組,首先獲取每個字元的 ASCII 編碼,然後將 ASCII 編碼轉換成 8

java 加密演算法 base64 以及 自定義 解密

import sun.misc.BASE64Decoder; public class Base64Utils {    public static String getBASE64(byte[] b) {   String s = null;   if (b !=

Qt以Base64加密作為基礎實現3種解密方式(包含中文處理)

目錄 效果圖 加密演算法 本文提供三種方式來加密解密,都是用Qt本身提供的類,沒用外接庫。 普通base64加密解密 Qt已經有了最基本的toBase64加密演算法,同時提供fromBase64解密演算法。 加密

python中base64模組的解密函式

Base64模組簡介 Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料(或不可列印的字串)。包括MIME的email,email via MIME, 在XML中儲存複雜資料

基於mbedtls-1.3.14庫的rsa公鑰與私鑰生成與解密base64編碼與解碼用法介紹

1.1 之前總結了一篇關於AES加密與解密,base64編碼與解碼用法介紹,順便把rsa的用法也總結一下 1.2 用法 #incl

微軟企業級解密解決方案MBAM架構

bitlocker mbam 企業級加解密解決方案 在之前的文章裏,我給大家分享了《Bitlocker企業安全加密管理系列-1》和《Bitlocker企業安全加密管理系列-2》在這裏我就不再給大家綴訴什麽是MBAM了,在這裏我主要給大家分享如何部署微軟企業級加解密解決方案MBAM系列文章,在這裏以