javascript:
加密:btoa("password")
JavaScript
解密:atob("cGFzc3dvcmQ=")
JavaScript
php:
加密:base64_encode ("password")
PHP
解密:base64_decode ("cGFzc3dvcmQ=")
PHP
java:
加密:
String originalInput = "password";
String encodedString=Base64.getEncoder()
.encodeToString(originalInput.getBytes());
Java
解密:
String encodedString="cGFzc3dvcmQ=";
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);
Java
C 语言:
加密(编辑器:visual studio 2017):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char const *encodeing_table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxzy0123456789+/";
int main() {
char inputStr[100] = {};
int inputStrLen = 0;
int remainder = 0;
char encodedStr[200] = {};
gets_s(inputStr);
inputStrLen = strlen(inputStr);
int i = 0;
char tempStr[5] = {};
for (;i<inputStrLen-inputStrLen%3&&inputStrLen>=3;i+=3) {
tempStr[0] = encodeing_table[inputStr[i] >> 2];
tempStr[1] = encodeing_table[(inputStr[i] & 0x03) << 4 | (inputStr[i + 1] >> 4)];
tempStr[2] = encodeing_table[(inputStr[i+1] & 0x0F)<<2|(inputStr[i + 2]>>6)];
tempStr[3] = encodeing_table[(inputStr[i + 2] & 0x3F)];
strcat_s(encodedStr,tempStr);
memset(tempStr, 0, sizeof (tempStr)/sizeof(tempStr[0]));
}
remainder = inputStrLen % 3;
if (remainder>0) {//如果输入的字符数量不能被3整除
tempStr[0] = encodeing_table[inputStr[i] >> 2];
if (1==remainder) {//如果余数等于1
tempStr[1] = encodeing_table[(inputStr[i] & 0x03) << 4];
}else {//余数等于2
tempStr[1] = encodeing_table[(inputStr[i] & 0x03) << 4 | (inputStr[i + 1] >> 4)];
tempStr[2] = encodeing_table[(inputStr[i + 1] & 0x0F) << 2 ];
}
strcat_s(encodedStr, tempStr);
remainder == 1 ? strcat_s(encodedStr,"=="): strcat_s(encodedStr, "=");
}
printf("base64加密后:%s\n",encodedStr);
system("pause");
return 0;
}
C
解密(编辑器:visual studio 2017):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char const *encodeing_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxzy0123456789+/";
int isBase64Str(char *str);
int getIndexOfBase64Char(char base64Char);
int main() {
char encodedStr[200] = {};
char decodedStr[200] = {};
gets_s(encodedStr);
if (!isBase64Str(encodedStr)) {
printf("无效base64字符串\n");
system("pause");
return false;
}
int length = strlen(encodedStr);
length = '=' == encodedStr[length - 1] ? ('=' == encodedStr[length - 2] ? length - 2 : length - 1) : length;//不包括字符串结尾的‘=’符号的字符串长度
int i = 0;
int remainder = length % 4;
char tempStr[5] = {};
for (;i<length-remainder;i+=4) {
char encodedChar[4] = {};
for (int j=0;j<4;j++) {
encodedChar[j] = getIndexOfBase64Char(encodedStr[i + j]);
}
tempStr[0] = (encodedChar[0] << 2) | ((encodedChar[1] & 0x30)>>4);
tempStr[1] = ((encodedChar[1] & 0x0f) << 4) | (encodedChar[2] >> 2);
tempStr[2] = ((encodedChar[2] & 0x03) << 6)| encodedChar[3];
strcat_s(decodedStr,tempStr);
memset(tempStr,0,sizeof(tempStr)/ sizeof(tempStr[0]));
}
if (remainder>0) {//如果不满足4个字符
char encodedChar[4] = {};
for (int j=0; j<length%4; j++) {
encodedChar[j] = getIndexOfBase64Char(encodedStr[i+ j]);
}
tempStr[0] = (encodedChar[0] << 2) | (encodedChar[1] >> 4);
if (length%4>2) {//剩余3个加密字符
tempStr[1] = ((encodedChar[1] & 0x0f) << 4)|((encodedChar[2] & 0x3C) >> 2);
}
strcat_s(decodedStr, tempStr);
}
printf("解密后的base64字符串:%s\n",decodedStr);
system("pause");
return 0;
}
/*
验证输入的字符串是否是base64字符串
*/
int isBase64Str(char *str) {
int length = strlen(str);
if (length%4!=0) {
return false;
}
length = '='==str[length - 1]?('=' == str[length - 2]?length-2:length-1):length;//不包括字符串结尾的‘=’符号的字符串长度
for (int i=0;i<length;i++) {
char currentChar = str[i];
if ((currentChar >= 'A'&¤tChar <= 'Z')||(currentChar >= 'a'&¤tChar <= 'z')||(currentChar >= '0'&¤tChar <= '9')||(currentChar=='+'|| currentChar == '/')) {
continue;
}
return false;
}
return true;
}
/*
根据base64字符获取在base64字符表中的下标
*/
int getIndexOfBase64Char(char base64Char) {
if (base64Char>='A'&&base64Char<='Z') {
return base64Char - 'A';
}
if (base64Char >= 'a'&&base64Char <= 'z') {
return base64Char - 'a'+26;
}
if (base64Char >= '0'&&base64Char <= '9') {
return base64Char - '0' + (26*2);
}
if ('+'==base64Char) {
return 62;
}
if ('=' == base64Char) {
return 63;
}
return 0;
}
C
评论区