Android安全加密专题文章索引
- Android安全加密:对称加密
- Android安全加密:非对称加密
- Android安全加密:消息摘要Message Digest
- Android安全加密:数字签名和数字证书
- Android安全加密:Https编程
一、凯撒密码
1. 概述
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3 的时候,所有的字母A 将被替换成D,B 变成E,由此可见,位数就是凯撒密码加密和解密的密钥。
例如:字符串”ABC”的每个字符都右移3 位则变成”DEF”,解密的时候”DEF”的每个字符左移3 位即能还原,如下图所示:
2. 准备知识
//字符转换成ASCII 码数值
char charA = 'a';
int intA = charA; //char 强转为int 即得到对应的ASCII 码值,’a’的值为97
//ASCII 码值转成char
int intA = 97;//97 对应的ASCII 码’a’
char charA = (char) intA; //int 值强转为char 即得到对应的ASCII 字符,即'a'
3. 凯撒密码的简单代码实现
/**
* 加密
* @param input 数据源(需要加密的数据)
* @param key 秘钥,即偏移量
* @return 返回加密后的数据
*/
public static String encrypt(String input, int key) {
//得到字符串里的每一个字符
char[] array = input.toCharArray();
for (int i = 0; i < array.length; ++i) {
//字符转换成ASCII 码值
int ascii = array[i];
//字符偏移,例如a->b
ascii = ascii + key;
//ASCII 码值转换为char
char newChar = (char) ascii;
//替换原有字符
array[i] = newChar;
//以上4 行代码可以简写为一行
//array[i] = (char) (array[i] + key);
}
//字符数组转换成String
return new String(array);
}
/**
* 解密
* @param input 数据源(被加密后的数据)
* @param key 秘钥,即偏移量
* @return 返回解密后的数据
*/
public static String decrypt(String input, int key) {
//得到字符串里的每一个字符
char[] array = input.toCharArray();
for (int i = 0; i < array.length; ++i) {
//字符转换成ASCII 码值
int ascii = array[i];
//恢复字符偏移,例如b->a
ascii = ascii - key;
//ASCII 码值转换为char
char newChar = (char) ascii;
//替换原有字符
array[i] = newChar;
//以上4 行代码可以简写为一行
//array[i] = (char) (array[i] - key);
}
//字符数组转换成String
return new String(array);
}
代码输出结果:
4. 破解凯撒密码:频率分析法
凯撒密码加密强度太低,只需要用频度分析法即可破解。
在任