12:字符串加密、解密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12:字符串加密、解密相关的知识,希望对你有一定的参考价值。
参考技术A编码: 将计算机中的字符串按照一定的顺序表示成二进制数据的过程
各国字符编码都不一样:
1、计算机-> 表示[英文字母、数字、部分特殊符号]-> ascii编码 [0~256]
2、万国码,统一字符编码[号称可以统一全球范围内任何语言的表示方式]
任何语言中的任何数据,都可以使用一个字符来表示 unicode编码
3、中国有GB2312-> GBK -> GB18030
4、数据传输编码:unicode transfer format 8 bit [UTF-8]
python中的编码解码:
要命的规则:字符串的编码解码,一直都是任何语言中一个难点和重点
任何字符串->都是由字节组成的!
python3中:字符:(str);字节(bytes)
字符->字节:encode 编码:将一个字符串编码成计算机可以操作的二进制数据
字节->字符:decode 解码:将一个二进制数据按照指定的编码~解码成自然数据
什么是加密: 将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥
什么是解密: 按照指定的算法和关键数据,将一个密文数据进行逆向运算得到正确的明文数据的过程成为解密操作
(1)、单向加密算法:只能加密,不能解密的算法
如:用户账号密码(单向加密)存储,此时任何人都不能查看该用户的明文密码
流程->用户输入明文密码->加密->和存储的密文密码进行比较->相等-成功
单向散列加密算法-> MD5加密
单项哈希加密算法-> SHAX加密
(2)、双向加密算法:可以加密,加密的数据可以解密得到明文数据
使用在更多的场景;数据进行加密传输->目标地址->解密得到明文数据进行处理
对称加密:加密和解密使用相同的秘钥;
非对称加密:加密和解密使用不同的秘钥;如HTTPS传输数据
hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法
注意: hashlib 加密啊的字符串类型为二进制编码,直接加密字符串会报如下错误:
有两种方式可以将字符串转化为二进制数据
关于C++中字符串加密及解密
一下是一段加密及解密代码,本人还不太熟悉C++,求高手帮忙分析一下,代码如下:
String^ decrypt(int key, array<unsigned char>^ text)
String^ result = "";
array<unsigned char>^ dbyte = gcnew array<unsigned char>(2);
for(int i=0; i<text->Length; i+=2)
dbyte = BitConverter::GetBytes((short)key);
// XOR decoding to receive Unicode character code
dbyte[0] ^= text[i];
dbyte[1] ^= text[i+1];
result += BitConverter::ToChar(dbyte, 0);
return result->TrimEnd(gcnew array<wchar_t>'\0');
array<unsigned char>^ encrypt(int key, String^ text, int length, bool appendZero)
array<unsigned char>^ result;
if(appendZero)
result = gcnew array<unsigned char>(length+2);
else
result = gcnew array<unsigned char>(length);
array<unsigned char>^ dbyte = gcnew array<unsigned char>(2);
for(int i=0; i<result->Length; i+=2)
dbyte = BitConverter::GetBytes((short)key);
result[i] = dbyte[0];
result[i+1] = dbyte[1];
if(i/2 < text->Length)
dbyte = BitConverter::GetBytes(text[i/2]);
result[i] ^= dbyte[0];
result[i+1] ^= dbyte[1];
/*
if(appendZero)
dbyte = BitConverter::GetBytes((short)key);
result[result->Length-2] = dbyte[0];//^(unsigned char)0;
result[result->Length-1] = dbyte[1];//^(unsigned char)0;
*/
return result;
可能大家没明白我的意思,我只是想了解它加密解密的原理…………
^代替*表示指针,是C++/CLI里面的用法,但是关键是我看他的操作都是针对KEY进行的,没有对字符串操作,他怎么就能加密呢,我想不通阿
后面的加密怎么看怎么不对,如果代码没错的话,就是我火候还不够。。。 参考技术A 晕了!有难度!还是另请高手吧! 参考技术B 没见过这种风格的c++…这字符^<,看来咱没见过世面呀 参考技术C C++基础都不熟悉,搞什么解密加密程序?
以上是关于12:字符串加密、解密的主要内容,如果未能解决你的问题,请参考以下文章