FromBase64String(String)和Encoding.Default.GetBytes(String)
今天突然被问FromBase64String(String)和Encoding.Default.GetBytes(String)有啥区别,我刚开始学C#对这个一脸懵逼,于是总结一下今天查资料的内容。
首先,什么是Base64?
Base64呀,是个加密算法,原理呢在这里不重要,以后有机会补充,这里仅举例。
最初明文:abc——>Base64加密——>密文:YWJj ——>Base64加密——>密文:WVdKag== ——>Base64加密——>密文:V1ZkS2FnJTNEJTNE
密文:V1ZkS2FnJTNEJTNE——>Base64解密——>明文:WVdKag==——>Base64加密——>明文:YWJj——>Base64加密——>最初明文:abc
至此还原成功,可见Base64加密不是一对一的,而且多次加密可以由多次解密还原。
这个FromBase64String(String)方法的意思呢,是跟Base64加密有关系的。
微软给出的解释是:
Converts the specified string, which encodes binary data as base-64 digits, to an equivalent 8-bit unsigned integer array.
将指定的字符串(它将二进制数据编码为 Base64 数字)转换为等效的 8 位无符号整数数组。
翻译成人话为:
把那个“将二进制数据加密为Base64格式数据的指定字符串”转换为“等效的 8 位无符号整数数组”
再翻译成人话:
把被加密成Base64格式字符串的数组还原。
怪不得微软官方给出的例子是这样的。
补充知识:
C# 里的byte对应C++里的unsigned char ,我知道一点点C,这样就一下子理解了。
但是用法上有区别,仅仅是取值范围是0-255
namespace EncodeandDecode
{
class Program
{
static void Main(string[] args)
{
byte[] bytes = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
Console.WriteLine("The byte array: ");
Console.WriteLine(" {0}\n", BitConverter.ToString(bytes));
// BitConverter.ToString(bytes)是转换为16进制字符串
string s = Convert.ToBase64String(bytes);
//s = bytes转换成的16进制字符串再进行Base64加密而生成的字符串
Console.WriteLine("The base 64 string: ");
Console.WriteLine(" {0}\n", s);
byte[] newBytes = Convert.FromBase64String(s);
//把s还原回16进制字符串
Console.WriteLine("The restored byte array: ");
Console.WriteLine(" {0}\n", BitConverter.ToString(newBytes));
}
}
}
运行结果为:
The byte array:
02-04-06-08-0A-0C-0E-10-12-14
The base 64 string:
AgQGCAoMDhASFA==
The restored byte array:
02-04-06-08-0A-0C-0E-10-12-14
如果不想加密,就是把byte数组与字符串来回转换怎么搞呢?
namespace StringTurnToByte
{
class Program
{
static void Main(string[] args)
{
string a = "1234";
byte[] newBytes1 = Convert.FromBase64String(a);
//将指定的字符串(它将二进制数据编码为 Base64 数字)转换为等效的 8 位无符号整数数组。
string str1 = System.Text.Encoding.Default.GetString(newBytes1);
Console.WriteLine(str1);
byte[] newBytes2 = System.Text.Encoding.Default.GetBytes(a);
//将指定字符串中的所有字符编码为一个字节序列,string转化为byte数组
string str2 = System.Text.Encoding.Default.GetString(newBytes2);
//转换byte为string
Console.WriteLine(str2);
}
}
}
输出结果:
譵?
1234
第一行相当于对1234进行解密,自然出现乱码
第二行1234是对1234字符串转换为 byte数组,然后以字符串的形式输出byte数组
终了
FromBase64String(String)和Encoding.Default.GetBytes(String)的更多相关文章
- System.Text.Encoding.Default
string strTmp = "abcdefg某某某";int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;/ ...
- 关于java String类的getBytes(String charsetName)和String(byte[] bytes, String charsetName)
public byte[] getBytes(Charset charset) Encodes this String into a sequence of bytes using the given ...
- java.lang.String.getBytes(String charsetName)方法实例
java.lang.String.getBytes(String charsetName) 方法编码将此String使用指定的字符集的字节序列,并将结果存储到一个新的字节数组. 声明 以下是java. ...
- 用java String类的getBytes(String charsetName)和String(byte[] bytes, String charsetName)解决乱码问题
Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小在java中是2个字节 我们还知道,现在普遍使 ...
- Tomcat启动服务报错:Unknown version string [3.1]. Default version will be used.
用Intellij IDEA 部署Web项目,Tomcat启动后报错Unknown version string [3.1]. Default version will be used. 作者的问题出 ...
- org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]. Default version will be used.报错
org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]. Default versio ...
- Tomcat启动服务报错:Unknown version string [4.0]. Default version will be used.
Tomcat.jdk.web.xml 对应关系: 版本对应错误,更换便可.(版本往下兼容) web.xml——version2.2——JDK1.1——Tomcat3.3 web.xml——versio ...
- Encoding encoding = Encoding.GetEncoding("gb2312"); 与byte[] ping = Encoding.UTF8.GetBytes(inputString);区别
Encoding encoding = Encoding.GetEncoding("gb2312"); 与byte[] ping = Encoding.UTF8.GetBytes( ...
- Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么?
Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么? Integer.valueof(String s)是将一个包装类是将一个实际 ...
随机推荐
- jquery实现可以中英切换的导航条
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- usermod - modify a user account
-a, --append Add the user to the supplementary group(s). Use only with the -G option. -G, --groups G ...
- Python的return语句中使用条件判断
if end1 <= val <= end2 or end2 <= val <= end1: return True else: return False 等于 return ...
- PHP面向对象:instanceof 运算符
http://www.nowamagic.net/php/php_InstanceofOperator.php 在PHP5中,通过方法传递变量的类型有不确定性.于是我们很难判断,一些操作是否可以运行. ...
- PHP curl_multi_info_read函数
curl_multi_info_read — 获取当前解析的cURL的相关传输信息 说明 array curl_multi_info_read ( resource $mh [, int &$ ...
- 【Flutter学习】之Widget数据共享之InheritedWidget
一,概述 业务开发中经常会碰到这样的情况,多个Widget需要同步同一份全局数据,比如点赞数.评论数.夜间模式等等.在安卓中,一般的实现方式是观察者模式,需要开发者自行实现并维护观察者的列表.在flu ...
- 微信jssdk安卓机分享QQ好友和QQ空间出现{"errMsg":"shareQQ:fail"}
使用ajax请求appid之类的配置,然后进行wx.config和wx.ready,苹果机上是完全OK的,但是安卓机上十次有九次是失败,只有一次能成功,百度了一下,有人说是参数有空格,有人说是微信bu ...
- Linux Bash Shell快速入门(一)
BASH 的基本语法· 最简单的例子 —— Hello World! · 关于输入.输出和错误输出 · BASH 中对变量的规定(与 C 语言的异同) · BASH 中的基本流程控制语法 · 函数的使 ...
- CCPC-Wannafly 秦皇岛 day5训练总结
训练总结 今天开局先上去看到了J,粗略(>_<)的看了下题意,然后就觉得应该是个dp 就开始写,思路是个三维dp,开的10000*10*10 觉得就不会爆,时间上也没问题,后面陆续wa了 ...
- ! Unknown property attribute "class"
当时是在用Xcode 7进行编译ASDK的代码发现报错了 当时就蒙圈了,@property(class)--这是啥呀,太久没看过object-c了,但是不至于@property是没有class属性的, ...