Base64Encoder

深入理解Base64的用法和原理 Base64 编码使用 64 个可打印的 ASCII 字符来表示数据。这些字符包括大写字母A-Z(26 个)、小写字母a-z(26 个,但在标准 Base64 中通常使用大写)、数字0-9(10 个)、加号和斜杠。此外,为了支持 URL 和文件名,还有一个变种使用代替和代替。与编码表一样,解码表依赖于 Base64 字符集,包括大写字母A-Z、小写字母a-z(在标准 Base64 中通常不使用)、数字0-9、加号和斜杠。对于 URL 安全的 Base64,使用代替和代替。Java 的Base64。 阅读详情

using System;
namespace WebApplication1
{
 /// <summary>
 /// Base64Encoder 的摘要说明
 /// 说明:Base编码类
 /// 写作者:Quentin
 /// </summary>
 public class Base64Encoder
 {
  byte[] source;
  int length,length2;
  int blockCount;
  int paddingCount;
  
  public Base64Encoder()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  public Base64Encoder(byte[] input)
  {
   source=input;
   length=input.Length;
   if((length % 3)==0)
   {
    paddingCount=0;
    blockCount=length/3;
   }
   else
   {
    paddingCount=3-(length % 3);
    blockCount=(length+paddingCount) / 3;
   }
   length2=length+paddingCount;
  }

  public char[] GetEncoded()
  {
   byte[] source2;
   source2=new byte[length2];

   for (int x=0; x<length2;x++)
   {
    if (x<length)
    {
     source2[x]=source[x];
    }
    else
    {
     source2[x]=0;
    }
   }
     
   byte b1, b2, b3;
   byte temp, temp1, temp2, temp3, temp4;
   byte[] buffer=new byte[blockCount*4];
   char[] result=new char[blockCount*4];
   for (int x=0;x<blockCount;x++)
   {
    b1=source2[x*3];
    b2=source2[x*3+1];
    b3=source2[x*3+2];

    temp1=(byte)((b1 & 252)>>2);

    temp=(byte)((b1 & 3)<<4);
    temp2=(byte)((b2 & 240)>>4);
    temp2+=temp;

    temp=(byte)((b2 & 15)<<2);
    temp3=(byte)((b3 & 192)>>6);
    temp3+=temp;

    temp4=(byte)(b3 & 63);

    buffer[x*4]=temp1;
    buffer[x*4+1]=temp2;
    buffer[x*4+2]=temp3;
    buffer[x*4+3]=temp4;

   }

   for (int x=0; x<blockCount*4;x++)
   {
    result[x]=sixbit2char(buffer[x]);
   }


   switch (paddingCount)
   {
    case 0:break;
    case 1:result[blockCount*4-1]='=';break;
    case 2:result[blockCount*4-1]='=';
     result[blockCount*4-2]='=';
     break;
    default:break;
   }
   return result;
  }
  private char sixbit2char(byte b)
  {
   char[] lookupTable=new char[64]
    {
      'A','B','C','D','E','F','G','H','I','J','K','L','M',
     'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
     'a','b','c','d','e','f','g','h','i','j','k','l','m',
     'n','o','p','q','r','s','t','u','v','w','x','y','z',
     '0','1','2','3','4','5','6','7','8','9','+','/'};

   if((b>=0) &&(b<=63))
   {
    return lookupTable[(int)b];
   }
   else
   {

    return ' ';
   }
  }

 }
}


解码类

using System;

namespace WebApplication1
{
 /// <summary>
 /// Base64Decoder 的摘要说明。
 /// 说明:Base编码类
 /// 写作者:Quentin
 /// </summary>
 public class Base64Decoder
 {
  char[] source;
  int length, length2, length3;
  int blockCount;
  int paddingCount;

  public Base64Decoder()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  public Base64Decoder(char[] input)
  {
   int temp=0;
   source=input;
   length=input.Length

   for (int x=0;x<2;x++)
   {
    if(input[length-x-1]=='=')
     temp++;
   }
   paddingCount=temp;

   blockCount=length/4;
   length2=blockCount*3;
  }

  public byte[] GetDecoded()
  {
   byte[] buffer=new byte[length];
   byte[] buffer2=new byte[length2];

   for(int x=0;x<length;x++)
   {
    buffer[x]=char2sixbit(source[x]);
   }

   byte b, b1,b2,b3;
   byte temp1, temp2, temp3, temp4;

   for(int x=0;x<blockCount;x++)
   {
    temp1=buffer[x*4];
    temp2=buffer[x*4+1];
    temp3=buffer[x*4+2];
    temp4=buffer[x*4+3];       

    b=(byte)(temp1<<2);
    b1=(byte)((temp2 & 48)>>4);
    b1+=b;

    b=(byte)((temp2 & 15)<<4);
    b2=(byte)((temp3 & 60)>>2);
    b2+=b;

    b=(byte)((temp3 & 3)<<6);
    b3=temp4;
    b3+=b;

    buffer2[x*3]=b1;
    buffer2[x*3+1]=b2;
    buffer2[x*3+2]=b3;
   }

   length3=length2-paddingCount;
   byte[] result=new byte[length3];

   for(int x=0;x<length3;x++)
   {
    result[x]=buffer2[x];
   }

   return result;
  }

  private byte char2sixbit(char c)
  {
   char[] lookupTable=new char[64]
    { 

     'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
     'O','P','Q','R','S','T','U','V','W','X','Y', 'Z',
     'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
     'o','p','q','r','s','t','u','v','w','x','y','z',
     '0','1','2','3','4','5','6','7','8','9','+','/'};
   if(c=='=')
    return 0;
   else
   {
    for (int x=0;x<64;x++)
    {
     if (lookupTable[x]==c)
      return (byte)x;
    }

    return 0;
   }

  }

 }
}

 

C#实现Base64的编码与解码 使用VS2013,C#已经集成Base64的编码与解码的功能,只要调用转换函数即可实现。 主要实现的代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System 阅读详情

相关推荐

Java开发中BASE64Encoder的使用

BASE64Encoder 其实是在jkd中的,但是默认不开放,在API中也是找不到的 所以先看看怎么将其导入: 右击项目--build path-->>configure build path-->> 双击Access rules-->>edit-->>add-->> 修改为accessible,Rule Patte...

马句 9419

java BASE64Encoder BASE64Decoder 废弃

java BASE64Encoder BASE64Decoder 废弃

global_coding的博客 4260

Modbus 通信协议详解

Modbus是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给 IDA(,分布式自动化接口)组织,并成立了 Modbus-IDA 组织。

Projectsauron 的博客 7万+

BASE64Encoder

JDK11版本中针对sun.misc.BASE64Encoder使用方法进行了修改升级,

weixin_38731776的博客 6250

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 279

LabVIEW小白福音:手把手教你用NI采集卡搭建振动信号采集系统(附源码和避坑指南)

本文为LabVIEW初学者提供详细的NI采集卡振动信号采集系统搭建指南,涵盖硬件连接、驱动安装、信号处理及性能优化等关键步骤。特别针对振动信号采集系统中的常见问题提供解决方案,并附源码和避坑指南,帮助用户快速上手并避免常见错误。

weixin_30485379的博客 103

解决BASE64Encoder报错的问题

今天在用servlet写一个文件下载的案例时,想解决文件的中文显示问题。然后在导包import sun.misc.BASE64Encoder时,发现IDEA报错了,无法识别这个类。最后发现在JDK9后,官方就已经不支持import sun.misc.BASE64Encoder了。 网上说了很多,第一种是把JDK的版本降低到1.8以内。但是我觉得这不是解决的最好办法。我觉得应该去修改原有的代码。 所以我采用了官方提供了新的jar包import java.util.Base64。 下面这个java类的本意

qq_45736175的博客 1万+

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1098

Android BASE64Encoder不能用的问题

昨天项目与后台交互的接口传参数需要加密,用的是BASE64Encoder加密,可是这个类不能用,谷歌了一下说的是: sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴 所以导包没有找到 解决办法:BASE64Encoder源码下载链接 下载上面的文件,解压后放入项目中就可以用啦

u010967188的博客 1万+

ICC2:postmask ECO参考脚本

更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 882

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

sun.misc.BASE64Encoder与java.util.Base64执行效率对比

项目中使用 BASE64Encoder 对文件进行编码解码时发现非常慢,与 Base64.Encoder 对比发现效率相差非常大,虽然 BASE64Encoder 可以使用输入输出流直接读取文件和生成目标文件,但是效率实在是太慢,对时间有要求的还是得尽量使用Base64.Encoder,效率对比如下: 1 sun.misc.BASE64Encoder BASE64Encoder encoder ...

weixin_42173616的博客 1509

CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程

冷冻电镜(CryoEM) 是一种成像方式,为蛋白质和其他生命基本组成部分的动态,提供独特的观察方式。从数百万噪声和随机取向的二维投影中,以计算效率高的方式,联合估计生物大分子的姿态、三维结构和构象异质性。

AGI 1554

import sun.misc.BASE64Encoder 报错

导入项目后 BASE64Encoder报错 错误信息:import sun.misc.BASE64Encoder 报错 解决方法: 把import sun.misc.BASE64Encoder 换成 import java.util.Base64; 将代码中的BASE64Encoder encoder = new BASE64Encoder();换成 Base64.Encoder encoder = Base64.getEncoder(); 将代码中的encode()方法换成encodeToString

weixin_45941832的博客 7596

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

简单介绍BASE64Encoder的使用

BASE64Encoder 其实是在jkd中的,但是默认不开放,在API中也是找不到的 所以先看看怎么将其导入: 右击项目--build path--&gt;&gt;configure build path--&gt;&gt; 双击Access rules--&gt;&gt;edit--&gt;&gt;edit--&gt;&gt; 修改为accessible,Rule Patter...

BarryLee的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

import sun.misc.BASE64Encoder 爆红,Cannot resolve symbol ‘BASE64Encoder

一. 错误详情 依赖没有问题的情况下,仍然无法正常引入BASE64Encoder 二. 解决方法 jdk版本问题,原先我使用的时jdk15,现在更换为jdk1.8可正常引入

枫陵的博客 3535

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

BASE64Encoder依赖的jar包配置方式

问题来源: 在我们对一些操作的数据进行操作验证时,可能会用到MD5加密或BASE64Encoder进行加密,实现我们的数据安全,但BASE64Encoder是依赖suan 公司提供的jar包的即-------sun.misc.BASE64Encoder 。 但我们自己配置的jdk 中是不存在次jar包。故需自己配置引进jar包。 解决方案: 右击工程,点击properties, 将自己配

奋、博、得 4万+

Base64和BASE64Encoder加密图片的区别

BASE64Encoder是一种加密 Base64是一种编码 使用BASE64Encoder加密(不建议使用) 使用Base64加密图片(推荐使用)

qq_41887100的博客 3455

替换sun.misc.BASE64Encoder

替换sun.misc.BASE64Encoder 现象: 一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的 这次换了JDK后发现提示找不到该类,网上有办法说重新配置jre就行了,但事实上不是这么简单的,在我测试后发现,这是要看配置的jre的类型是execution environment(执行环境),还是al

pplsunny----舞动青春 4216

通过BASE64Encoder获得数据指纹

BASE64Encoder不是Sun公司公布出来的标准api,但是我们可以使用。 注意:        在使用eclipse或myeclipse等开发工具时,我们必须使用我们自己安装的jdk,不能使用工具的jdk,不然则不能使用这个类,在window->preferfences->java->java compiler中设置编译环境版本为自己机器上安装 的jdk版本,或者是在新建一个j

u013999337的专栏 1223

sun.misc.BASE64Encoder存在的问题及其解决方法

问题背景:          最近在开发中用到了sun.misc.BASE64Encoder。发现两个问题:       其一、当编码的字节较长时,encode出来的字符串会自动加入\n\r进行自动换行。针对这个问题,原因是rfc规范规定76个字符换一次行。       其二、编码效率较低。  解决办法:         1、重写BASE64Encoder:  Java

w412748643的博客 4774

如何替代被遗弃的BASE64Encoder/BASE64Decoder

一、问题 关键词:警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除! 场景:在编码时,密码机密或二进制转换的时候,使用了sun.misc.BASE64Encoder或sun.misc.BASE64Decoder类; 二、因素 使用了sun.misc包下的BASE64Encoder类或BASE64Decoder类。这两个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。jdk1.8及后面已经弃用了该

DayDayUp的博客 1万+

java encoder_Java java.util.Base64.Encoder 类

Java java.util.Base64.Encoder 类是 java.util.Base64 类的一个内部静态类。该类提供了一些方法用于将一些字节数据编码为 Base64 格式的数据。( JAVA >= 8 )java.util.Base64.Encoder 类java.util.Base64.Encoder 类的定义如下public static class Base64.Encod...

weixin_35146121的博客 2539

eclipse导入BASE64Encoder类的方法

调用BASE64Encoder类时可能不会成功, import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Demo { public static void main(String[] args) { byte[] data = "yanglingzhi".ge...

JavaPub 1895
上一篇: ASP.NET常用函数
下一篇: [Music]take me to your heart
大雨仔
博客等级 码龄23年 28粉丝 159原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值