Hello,大家好, 我是Shendi,这次给大家带来一系列密码学教程,这次讲一些简单的数据加密
要想实现数据加密我们得知道什么是数据
数据的底层都是字节
所以我们要实现加密,只需要修改源数据的字节就行了,例如我们想将hello world这个字符串加密,让别人看不懂,我们可以这样,这样再这样...
加密算法一
/**
* -加密算法 插入加一算法
* -在字节数组的第二位插入1 第四位插入2 以此类推
* @param source 传递的字节数组
* @return 加密后的字节数组
*/
public static byte[] encryptInsertAddOne(byte[] source) {
byte[] encrypt = new byte[(source.length << 1) - 1];
encrypt[0] = source[0];
for (int i = 1;i < source.length;i++) {
encrypt[(i<<1)-1] = (byte) i;
encrypt[i<<1] = source[i];
}
return encrypt;
}
/**
* -解密算法 插入加一算法
* @param encrypt 加密的字节数组
* @return 返回解密的字节数组
*/
public static byte[] decodeInsertAddOne(byte[] encrypt) {
byte[] source = new byte[(encrypt.length >> 1) + 1];
for (int i = 0;i < encrypt.length;i+=2) {
source[i >> 1] = encrypt[i];
}
return source;
}
原理是将字符串变成字节数组,然后在第一个字节和第二个字节中插入一个数字,
第二个和第三个字节中插入一个数字,这样加密可以做到不污染源数据...但是数据大小翻倍,而且并不是很安全
以下为使用此加密算法的hello world输出结果
加密算法二
/**
* -加密算法 加一算法 将所有字节加一 可和解密算法互换用
* @param source 传递此参数 将此参数加密
*/
public static void encryptAddOne(byte[] source) {
for (int i = 0;i < source.length;i++) {
source[i] = (byte) (source[i] + 1);
}
}
/**
* -解密算法 加一算法 将所有字节减一 可和加密算法互换用
* @param encrypt 传递此参数 将此参数解密
*/
public static void decodeAddOne(byte[] encrypt) {
for (int i = 0;i < encrypt.length;i++) {
encrypt[i] = (byte) (encrypt[i] - 1);
}
}
这个算法简单易懂 并且加密和解密可以互用,但是源数据为数字的话就不好使了
这是用此算法的加密 hello world 的输出结果
在此算法上优化了一下
加密算法三
/**
* -加密算法 加i算法 将所有字节加i 可和解密算法互换用
* @param source 传递此参数 将此参数加密
*/
public static void encryptAddI(byte[] source) {
source[0] += 1;
for (int i = 1;i < source.length;i++) {
source[i] = (byte) (source[i] + i);
}
}
/**
* -解密算法 加i算法 将所有字节减i 可和加密算法互换用
* @param encrypt 传递此参数 将此参数解密
*/
public static void decodeAddI(byte[] encrypt) {
encrypt[0] -= 1;
for (int i = 1;i < encrypt.length;i++) {
encrypt[i] = (byte) (encrypt[i] - i);
}
}
下面是hello world的输出结果
如果对你有用的话点个赞再走吧~