desecb加密解密
㈠ 关于 vue中使用crypto-js,进行DES 的加密解密
安装: npm install crypto-js --save
在utils文件夹中新建secret.js文件,内容:
message: 需要加解密的文本
key: 加解密的秘钥
iv: 偏移量,最短8位数,ecb模式不需要此参数
在vue页面引入secret.js文件
㈡ des解密算法,利用C语言解密java语言加密的密码。。密钥为12345678,加密后的密文为:26d086be3a3a62fc
// C 语言 DES用的是 ECB模式, 没有填充
// 因此Java端要对应, 你的明文是 liubiao 吗?
// 另外 DES已经不安全了, 如果可以改为 3DES或者 AES吧。
public class LearnDes {
public static void main(String[] args) {
try {
System.out.println(encrypt("liubiao", "12345678"));
System.out.println(decrypt("26d086be3a3a62fc", "12345678"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encrypt(String message, String key) throws Exception {
//Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
Cipher cipher = Cipher.getInstance("DES/ECB/NOPADDING");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey );
return toHexString(cipher.doFinal(message.getBytes("UTF-8")));
}
public static String decrypt(String message, String key) throws Exception {
byte[] bytesrc = convertHexString(message);
//Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
Cipher cipher = Cipher.getInstance("DES/ECB/NOPADDING");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey );
byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte);
}
public static byte[] convertHexString(String ss) {
byte digest[] = new byte[ss.length() / 2];
for (int i = 0; i < digest.length; i++) {
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte) byteValue;
}
return digest;
}
public static String toHexString(byte b[]) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2)
plainText = "0" + plainText;
hexString.append(plainText);
}
return hexString.toString();
}
}
㈢ 如何使用JAVA实现对字符串的DES加密和解密
/**
*ECB模式的des加密,以base64的编码输出
*@parammessage
*@paramkey
*@return
*@throwsException
*/
publicstaticStringdesEncrypt(Stringmessage,Stringkey)throwsException{
//DES/ECBCBCCFBOFB/PKCS5PaddingNoPadding加密/模式/填充
Ciphercipher=Cipher.getInstance("DES");//默认就是DES/ECB/PKCS5Padding
DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes());
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);
cipher.init(1,secretKey);
returnnewBASE64Encoder().encode(cipher.doFinal(message.getBytes("UTF-8")));
}
/**
*ECB模式的des解密
*@parammessage
*@paramkey
*@return
*@throwsException
*/
publicstaticStringdesDecrypt(Stringmessage,Stringkey)throwsException{
Ciphercipher=Cipher.getInstance("DES");
DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes());
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);
cipher.init(2,secretKey);
returnnewString(cipher.doFinal(Base64.decode(message)),"UTF-8");
}
你自己写main方法测试一下,应该是没问题的
㈣ DES加密解密结果为何不一致
将明文分成n个64比特分组,如果明文长度不是64比特的倍数,则在明文末尾填充适当数目的规定符号。对明文组用给定的密钥分别进行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。第二种密文分组链接方式(CBC) 在CBC方式下,每个明文组xi在加密前与先一组密文按位模二加后,再送到DES加密,CBC方式克服了ECB方式报内组重的缺点,但由于明文组加密前与一组密文有关,因此前一组密文的错误会传播到下一组。 第三种密文反馈方式(CFB),可用于序列密码 明文X=(x0,x1,……,xn-1),其中xi由t个比特组成0 第四种输出反馈方式(OFB),可用于序列密码 与CFB唯一不同的是OFB是直接取DES输出的t个比特,而不是取密文的t个比特,其余都与CFB相同。但它取的是DES的输出,所以它克服了CFB的密文错误传播的缺点