由于某种需要,需要对0-255的IP进行四位转换,例如255转为类似“vc52”这样的四个字符的字符串。
public class Base36 {
private final static int addition = 100000;
private final static byte[] Base36 = {
(byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4',
(byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9',
(byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
(byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J',
(byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O',
(byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T',
(byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y',
(byte) 'Z'
};
private static int transform(int base){
int level = addition;
base += level;
System.out.println(base);
return base;
}
public static String encode(int dex){
dex = transform(dex);
StringBuilder code36 = new StringBuilder();
int quotient = dex;
int remainder = 0;
char temp = '0';
while((quotient / 36) > 0){
remainder = quotient % 36;
temp = (char) Base36[remainder];
code36.append(temp);
quotient = quotient / 36;
}
if((remainder = quotient % 36) > 0){
code36.append((char) Base36[remainder]);
}
return code36.toString();
}
public static int decode(String code){
int base = 0;
int level = 0;
for(int i = 0; i < code.length(); i++){
level = getIndex((byte) code.charAt(i));
if(i == 0){
base += level;
} else if(i == 1){
base += level * 36;
} else if(i == 2){
base += level * 36*36;
} else if(i == 3){
base += level * 36*36*36;
}
}
System.out.println(base);
base %= addition;
return base;
}
private static int getIndex(byte code){
code = change2UpCase(code);
int index = 0;
for(int i = 0; i < Base36.length; i++){
if(Base36[i] == code){
index = i;
break;
}
}
return index;
}
private static byte change2UpCase(byte code){
if(code >= 'a' && code <= 'z'){
code = (byte) (code - 32);
}
return code;
}
public static void main(String[] args) {
// String result = encode(255);
// System.out.println(result);
System.out.println(decode("vC52"));
}
}
分享到:
相关推荐
在某些情况下,为了保护隐私或安全,我们需要对IP地址进行加密处理,这可以通过各种加密算法实现。易语言提供了丰富的内置函数和模块,支持开发者自定义算法来完成这一任务。 IP加密可以采用对称加密或非对称加密...
3. **数据分组**:输入的数据被分为64位的块进行处理,DES只能对64位的数据进行操作。 4. **初始置换**(IP):64位输入数据经过一个固定置换表,改变数据的原始顺序。 5. **16轮迭代**:每一轮包括子密钥产生、...
- **密钥规格**:使用56位密钥进行加密。 - **核心安全特性** - **混淆**:使得明文与密文之间的关系复杂化,难以通过数学方法解析。 - **扩散**:明文与密钥中的任何一位变化都能导致密文中多位的变化,增强安全...
3. **逆初始置换(IP^-1)**:在16轮迭代结束后,对最后的32位数据进行逆初始置换,得到最终的密文。 在C语言中实现DES加密,你需要定义数据结构来存储明文和密文,创建函数处理上述各个步骤,并考虑如何读取和写入...
本文档主要介绍了使用C++语言实现IP数据包解析程序的设计和实现,程序代码包括了对IP头的逐位解析,包括版本、服务类型、总长度、标识、旗标、分段偏移、生命周期、协议、头校验和、源地址、目的地址等信息的解析。...
### 对主机的MAC地址进行MD5加密的知识点详解 #### 一、背景介绍 在网络安全领域,为了确保数据传输的安全性以及验证数据源的真实性和完整性,通常会采用各种加密技术来保护敏感信息不被非法窃取或篡改。其中一种...
1. **二进制乘法规则**:理解二进制乘法的基本原理,包括如何将两个四位二进制数逐位相乘,以及如何进行位移和加法操作来获得最终结果。 2. **逻辑门设计**:并行乘法器的底层是各种逻辑门(如与门、或门、异或门、...
- **替换函数(Permutation Function, P盒)**:使用S盒对32位输入进行非线性变换。 - **异或操作(XOR)**:将S盒的结果与48位子密钥异或。 - **逆初始置换(Inverse IP)**:对上一步的结果进行逆操作,恢复...
DES算法采用相同的密钥进行加密和解密,其核心在于使用一个56位的密钥对64位的数据块进行加密。尽管随着技术的发展,DES已经逐渐被更安全的算法如AES所取代,但它仍然是理解对称加密原理的一个重要案例。 #### 二、...
它采用的是对称加密机制,使用56位密钥对64位的数据块进行加密处理。尽管随着计算机技术的发展,56位密钥长度的DES算法已经被证明安全性不足,并且有诸多关于DES加密文本被破解的报道出现,但了解这一曾经被美国作为...
DES加密的核心是使用56位的密钥对64位的数据块进行操作,通过一系列复杂的替换和转换过程,将明文数据转化为无法直接识别的密文。这种加密方式在当时被认为是非常安全的,但随着计算能力的发展,现在DES的安全性已经...
1. **初始置换(IP)**:原始的64位明文被分为左右两半,每半32位,然后进行初始置换,这一步主要是打乱数据的顺序。 2. **轮函数**:这个过程是DES的核心,包括16轮迭代,每轮都包含四个子步骤: - **扩展置换(E...
2. **初始置换IP**:明文块在加密前先进行一次初始置换,将64位的数据重新排列。 3. **轮函数**:每一轮都包括以下四个步骤: - **子密钥产生**:使用当前轮的子密钥和上一轮的中间结果。 - **半块异或**:将结果...
4. **安全性和性能**:尽管DES由于其56位密钥的长度现在被认为是不够安全的,但通过三重DES(3DES)可以提高安全性,它使用三个不同的密钥进行三次加密,以达到更长的密钥长度。然而,3DES的加密速度相对较慢。现代...
3. **逆初始置换(IP^-1)**:在16轮迭代结束后,对左右两半进行逆初始置换,得到最终的64位密文。 在C语言中实现DES加密,你需要创建数据结构来存储原始明文、密钥、中间结果以及置换表。同时,你需要编写函数来...
2. 初始置换(IP):对数据块进行特定的位移操作,打乱数据顺序,增加破解难度。 3. 16轮迭代:每轮包括子密钥生成、扩展置换、异或操作、微操作四个步骤。每个子密钥由主密钥通过一系列置换和异或操作生成。 4. ...
数据加密标准(DES)是一种对称分组加密算法,它使用56位密钥对64位的数据块进行加密。DES加密过程包括以下几个步骤: - **初始置换IP(Initial Permutation)**:对输入的64位明文进行重新排列。 - **密钥扩展**...
3. **初始置换IP**:这是加密过程的第一步,64位明文通过IP表进行重新排列,打乱数据的原始顺序。 4. **密钥扩展**:DES的56位密钥会被扩展成48位的子密钥,通过一系列置换和选择操作实现,这样在每一轮中都有一个...