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的密文錯誤傳播的缺點