package com.byd;
public class Base {
static private final int BASELENGTH = 255;
static private final int LOOKUPLENGTH = 64;
static private final int TWENTYFOURBITGROUP = 24;
static private final int EIGHTBIT = 8;
static private final int SIXTEENBIT = 16;
static private final int SIXBIT = 6;
static private final int FOURBYTE = 4;
static private final int SIGN = -128;
static private final byte PAD = (byte) '=';
static private byte [] base64Alphabet = new byte[BASELENGTH];
static private byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
static
{
for (int i = 0; i < BASELENGTH; i++ )
{
base64Alphabet[i] = -1;
}
for (int i = 'Z'; i >= 'A'; i--)
{
base64Alphabet[i] = (byte) (i - 'A');
}
for (int i = 'z'; i>= 'a'; i--)
{
base64Alphabet[i] = (byte) (i - 'a' + 26);
}
for (int i = '9'; i >= '0'; i--)
{
base64Alphabet[i] = (byte) (i - '0' + 52);
}
base64Alphabet['+'] = 62;
base64Alphabet['/'] = 63;
for (int i = 0; i <= 25; i++ )
lookUpBase64Alphabet[i] = (byte) ('A' + i);
for (int i = 26, j = 0; i <= 51; i++, j++ )
lookUpBase64Alphabet[i] = (byte) ('a'+ j);
for (int i = 52, j = 0; i <= 61; i++, j++ )
lookUpBase64Alphabet[i] = (byte) ('0' + j);
lookUpBase64Alphabet[62] = (byte) '+';
lookUpBase64Alphabet[63] = (byte) '/';
}
public static boolean isBase64( String isValidString )
{
return isArrayByteBase64(isValidString.getBytes());
}
public static boolean isBase64( byte octect )
{
return (octect == PAD || base64Alphabet[octect] != -1);
}
public static boolean isArrayByteBase64( byte[] arrayOctect )
{
int length = arrayOctect.length;
if (length == 0)
{
return true;
}
for (int i=0; i < length; i++)
{
if(!Base.isBase64(arrayOctect[i]))
return false;
}
return true;
}
/**
* @author
* @param args
* @return
*/
public static String encode(String args){
return new String(encode(args.getBytes()));
}
/**
* Encodes hex octects into Base64.
*
* @param binaryData Array containing binary data to encode.
* @return Base64-encoded data.
*/
public static byte[] encode( byte[] binaryData )
{
int lengthDataBits = binaryData.length*EIGHTBIT;
int fewerThan24bits = lengthDataBits%TWENTYFOURBITGROUP;
int numberTriplets = lengthDataBits/TWENTYFOURBITGROUP;
byte encodedData[] = null;
if (fewerThan24bits != 0)
{
encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
}
else
{
encodedData = new byte[ numberTriplets * 4 ];
}
byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
int encodedIndex = 0;
int dataIndex = 0;
int i = 0;
for ( i = 0; i<numberTriplets; i++ )
{
dataIndex = i*3;
b1 = binaryData[dataIndex];
b2 = binaryData[dataIndex + 1];
b3 = binaryData[dataIndex + 2];
l = (byte)(b2 & 0x0f);
k = (byte)(b1 & 0x03);
encodedIndex = i * 4;
byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
encodedData[encodedIndex+1] =
lookUpBase64Alphabet[ val2 | ( k<<4 )];
encodedData[encodedIndex+2] =
lookUpBase64Alphabet[ (l <<2 ) | val3 ];
encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
}
dataIndex = i*3;
encodedIndex = i*4;
if (fewerThan24bits == EIGHTBIT )
{
b1 = binaryData[dataIndex];
k = (byte) ( b1 &0x03 );
byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
encodedData[encodedIndex + 1] = lookUpBase64Alphabet[ k<<4 ];
encodedData[encodedIndex + 2] = PAD;
encodedData[encodedIndex + 3] = PAD;
}
else if (fewerThan24bits == SIXTEENBIT)
{
b1 = binaryData[dataIndex];
b2 = binaryData[dataIndex +1 ];
l = (byte) (b2 & 0x0f);
k = (byte) (b1 & 0x03);
byte val1 = ((b1 & SIGN) == 0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
byte val2 = ((b2 & SIGN) == 0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
encodedData[encodedIndex + 1] =
lookUpBase64Alphabet[ val2 | ( k<<4 )];
encodedData[encodedIndex + 2] = lookUpBase64Alphabet[ l<<2 ];
encodedData[encodedIndex + 3] = PAD;
}
return encodedData;
}
/**
* @author wangxiuwei
* @param args
* @return
*/
public static String decode(String args){
return new String(decode(args.getBytes()));
}
/**
* Decodes Base64 data into octects
*
* @param base64Data Byte array containing Base64 data
* @return Array containing decoded data.
*/
public static byte[] decode( byte[] base64Data )
{
if(base64Data.length == 0) { return new byte[0]; }
int numberQuadruple = base64Data.length/FOURBYTE;
byte decodedData[] = null;
byte b1=0,b2=0,b3=0, b4=0, marker0=0, marker1=0;
int encodedIndex = 0;
int dataIndex = 0;
{
int lastData = base64Data.length;
while (base64Data[lastData-1] == PAD)
{
if (--lastData == 0)
{
return new byte[0];
}
}
decodedData = new byte[ lastData - numberQuadruple ];
}
for (int i = 0; i < numberQuadruple; i++)
{
dataIndex = i * 4;
marker0 = base64Data[dataIndex + 2];
marker1 = base64Data[dataIndex + 3];
b1 = base64Alphabet[base64Data[dataIndex]];
b2 = base64Alphabet[base64Data[dataIndex +1]];
if (marker0 != PAD && marker1 != PAD)
{
b3 = base64Alphabet[ marker0 ];
b4 = base64Alphabet[ marker1 ];
decodedData[encodedIndex] = (byte)( b1 <<2 | b2>>4 ) ;
decodedData[encodedIndex + 1] =
(byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
decodedData[encodedIndex + 2] = (byte)( b3<<6 | b4 );
}
else if (marker0 == PAD)
{
decodedData[encodedIndex] = (byte)( b1 <<2 | b2>>4 ) ;
}
else if (marker1 == PAD)
{
b3 = base64Alphabet[ marker0 ];
decodedData[encodedIndex] = (byte)( b1 <<2 | b2>>4 );
decodedData[encodedIndex + 1] =
(byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
}
encodedIndex += 3;
}
return decodedData;
}
}
测试类
package com.byd;
public class test {
public static void main(String[] args) {
String a="赚钱给狗狗买肉吃";
Base test=new Base();
String b=test.encode(a);
System.out.println(b);
String c=test.decode(b);
System.out.println(c);
}
}
打印结果:6LWa6ZKx57uZ54uX54uX5Lmw6IKJ5ZCD
赚钱给狗狗买肉吃
分享到:
相关推荐
### RAS图像文件格式分析 #### 一、引言 随着计算机技术和图形处理技术的发展,大量的扫描仪被广泛应用于各种领域。这些扫描仪能够将纸质文档或者图片转换为电子格式,便于存储、传输和处理。其中,RAS(Raster ...
HEC-RAS,即美国陆军工程师团水文工程中心(Hydrologic Engineering Center)开发的河流分析系统(River Analysis System),是一款用于执行一维稳态和非稳态流动河流水力学计算的软件。HEC-RAS设计为在多任务、多...
HEC-RAS(Hydrologic Engineering Center's River Analysis System)是由美国陆军工程兵团Hydrologic Engineering Center开发的一款河流水力学模型软件。它主要用于模拟河流、渠道、水库等水体的流态、水位、流速、...
**RAS拨号技术在C++中的应用** RAS(远程访问服务)拨号是Windows操作系统中用于连接到远程网络或Internet的一种技术。在C++编程环境中,开发人员可以使用RAS API(应用程序接口)来实现拨号网络功能。本文档主要...
在.NET框架中,C#语言提供了丰富的加密和解密功能,其中包括使用RAS(Rivest-Shamir-Adleman)算法。RAS是一种常用的公钥加密算法,广泛应用于数据传输、数字签名等领域。本篇文章将深入探讨C#中如何实现RAS加密和...
"EXCEL实现投入产出表RAS法" 在经济学和管理学领域中,投入产出表是一种重要的分析工具,用于描述一定时期内各部门间的相互联系和平衡关系。为了实现投入产出表的编制,需要使用某些方法来估计投入产出表的参数。...
**H225协议与RAS信令详解** H225协议是ITU-T制定的Q.931协议的扩展,主要用于实现ISDN(综合业务数字网)环境下的VoIP(Voice over IP,IP语音)通信。这个协议集包含了呼叫控制、信道分配以及带宽管理等关键功能,...
在经济分析领域,RAS法(Ratio Adjusted Squares)是一种用于修订投入产出表的统计方法,它在处理不完整或不准确的数据时尤为有效。投入产出表是经济学中的一个重要工具,它展示了一个国家或地区各部门间的经济联系...
HEC-RAS 河流分析系统(V3.1)中文手册 HEC-RAS 是由美国工程兵团开发的河流分析系统(HEC-RAS)软件,可以完成一维恒定流和非恒定流的河流水力计算。HEC-RAS 系统包含三个一维水力分析模块:(1)恒定流水面线计算;...
HEC-RAS(Hydrologic Engineering Center's River Analysis System)是由美国陆军工程兵团开发的一款强大的水利工程模拟软件,广泛应用于河流水动力学、洪水分析、河床演变和水质模拟等领域。本教程聚焦于HEC-RAS在...
HEC-RAS(Hydrologic Engineering Center's River Analysis System)是由美国陆军工程兵团水文工程中心开发的一款河流分析系统软件,主要用于进行河道水力计算。该软件支持一维恒定流和非恒定流的计算,适用于河流...
HEC-RAS是一个由美国工程水文中心开发的河道水力计算程序。HEC-RAS 目前的模拟能力包括河道一维恒定流,一维/二维非恒定流,一维泥沙输移/水质模型。此外还支持坝,堰,堤,桥梁,涵管,闸门等水工建筑物的水力建模...
在给定的“ras_加密解密vc_ras_”项目中,我们关注的是使用VC++(Visual C++)编程语言实现的RAS(Rivest-Shamir-Adleman)加密算法。RAS是一种非对称加密算法,它基于数学中的素数理论,为数据提供安全的加密和解密...
**标题解析:** "rsa.rar_RAS还是RSA_ras rsa_ras与RSA_rsa ras_非对称加密" 这个标题看似复杂,但实际上它在强调一个主题,即RAS(可能指的是Remote Access Service)和RSA(Rivest-Shamir-Adleman)之间的区别,...
**RAS Tool v2.14** RAS Tool v2.14 是一款专门用于生成RSA加密算法密钥对的实用程序。RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,广泛应用于网络安全、数据加密、数字签名等领域。它的核心原理是基于...
HEC-RAS是一款由美国陆军工程兵团开发的河川流域模拟软件,广泛应用于洪水风险分析、水力设计等领域。本文将围绕HEC-RAS简体中文翻译及项目管理部分的知识点进行详细阐述。 首先,HEC-RAS软件用户手册的翻译版可以...
HEC-RAS(Hydrologic Engineering Center's River Analysis System)是由美国陆军工程兵团Hydrologic Engineering Center开发的一款专业水文水力模型软件。版本4.1.0是该软件的一个重要迭代,它提供了广泛的功能来...
RAS法(Ratio Adjusted Squares, 比例调整平方法)是求解投入产出表中直接消耗系数的一种常用方法,尤其适用于修订和预测工作。在MATLAB环境中实现RAS法,可以提高计算效率并确保结果的准确性。 RAS法的基本思想是...
HEC-RAS(Hydrologic Engineering Center's River Analysis System)是由美国陆军工程兵团开发的一款用于河流水力学模拟的专业软件。这个“HEC-RAS视频”很可能是针对初学者的教程,旨在帮助用户快速掌握该软件的...
《HEC-RAS_3.1_用户手册》是一份详尽的指南,专注于介绍美国陆军工程兵团水文工程中心(HEC)开发的河流分析系统(HEC-RAS)的第三版。HEC-RAS是一款强大的水力计算工具,主要用于进行河道的稳定流和非稳定流一维...