Untitled
unknown
plain_text
4 years ago
2.4 kB
8
Indexable
#include <bits/stdc++.h> namespace base64 { std::string decode(const std::string& input); std::string encode(const std::string& input); } std::string base64 :: decode(const std::string& input) { std::string b ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); std::string y=input; std::string ans(""); int s=y.size(); int A[6*s]; int d,num=0; for(int i=0;i<s;i++) { d=0; int k; for(int j=0;j<64;j++) { if(b[j]==y[i]) k=j; else d++; } if(d<64) { for(int j=6*i+5;j>=6*i;j--) { A[j]=k%2; k=k/2; } } else num++; } int k; int len=(6*s-6*num)/8; for(int i=0;i<len;i++) { k=0; for(int j=8*i;j<8*i+8;j++) k=k*2+A[j]; int z=(char)k; ans+=z; } return ans; } std::string base64 :: encode(const std::string& input) { std::string b ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); std::string y=input; std::string ans(""); int s=y.size(); int A[8*s]; for(int i=0;i<s;i++) { int k=y[i]; for(int j=8*i+7;j>=8*i;j--) { A[j]=k%2; k=k/2; } } int l=(8*s)/6; int k; for(int i=0;i<l;i++) { k=0; for(int j=6*i;j<6*i+6;j++) k=k*2+A[j]; ans+=b[k]; } if(8*s-l*6==2) { k=0; for(int j=6*l;j<6*l+2;j++) k=k*2+A[j]; k=k<<4; ans+=b[k]; ans+="=="; } else if(8*s-l*6==4) { k=0; for(int j=6*l;j<6*l+4;j++) k=k*2+A[j]; k=k<<2; ans+=b[k]; ans+="="; } else if(8*s-l*6==6) { k=0; for(int j=6*l;j<6*l+6;j++) k=k*2+A[j]; ans+=b[k]; ans+="==="; } return ans; }
Editor is loading...