21xrx.com
2025-06-01 20:38:05 Sunday
登录

javascript:

加密:btoa("password")
JavaScript
解密:atob("cGFzc3dvcmQ=")
JavaScript

php:

加密:base64_encode ("password")
解密:base64_decode ("cGFzc3dvcmQ=")

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;
}

解密(编辑器: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'&&currentChar <= 'Z')||(currentChar >= 'a'&&currentChar <= 'z')||(currentChar >= '0'&&currentChar <= '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;
}
  
  

评论区

21技术    www.21xrx.com 备案号:蜀ICP备17043188号-2