des加密js
Ⅰ php的des加密用js解密解除亂碼,發現2個加密出的東西不一樣
JS加密和PHP加密是不同的,雖然都是md5加密,所以你不能直接判斷js加密和PHP加密是否相等,畢竟是兩種語言,要麼都用js的加密,要麼都是PHP的
Ⅱ 前端js幾種加密/解密方法
方法匯總:
https://www.cnblogs.com/pinkpolk/articles/13600696.html
項目中用了crypto-js DES加密解密 前端用下面方法加密 後台用java的des解密
https://blog.csdn.net/huaweichenai/article/details/103497194
crypto-js AES需要前端來處理加密解密
https://www.npmjs.com/package/crypto-js
JS 使用 SHA1 加密示例
https://blog.csdn.net/qq_40147863/article/details/88034357
Ⅲ 關於 vue中使用crypto-js,進行DES 的加密解密
安裝: npm install crypto-js --save
在utils文件夾中新建secret.js文件,內容:
message: 需要加解密的文本
key: 加解密的秘鑰
iv: 偏移量,最短8位數,ecb模式不需要此參數
在vue頁面引入secret.js文件
Ⅳ 前端jsp登錄密碼加密為des3加密方法
*_*?我是誰
原創
關注
0點贊·757人閱讀
<%@ page contentType="text/html;charset=GBK"%>
<%@ page language="java" import="java.util.regex.*,
com.excellence.common.OAConstant,
com.excellence.common.UserInfo,
java.util.*,
java.text.SimpleDateFormat," %>
<html>
<head>
<title>XX系統</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="/common/styles/default/default.css" type="text/css">
</head>
<script language="javascript">
</script>
<script language="JavaScript" src="/oa/javascripts/crypto-js.js"></script>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
<center>
</center>
</body>
<script type="text/vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script>
<script>
<%
UserInfo userInfo = (UserInfo) request.getSession().getAttribute("userInfo ");
String account="";
//獲取用戶賬號
if(userInfo.getAccount()!=null&&!"".equals(userInfo.getAccount()))
account=userInfo.getAccount();
//有效期:格式:yyyy-MM-dd HH:mm:ss 有效期不能設置超過10分鍾
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
Date date = new Date(now .getTime() + 600000);
String time = df.format(date);
%>
//sessionid = base64(DES(用戶賬號&有效期))
//DES key:67HT4WrP
var sessionId = "<%=account%>" + "&" + "<%=time%>";
var mykey = "67HT4WrP";
// DES加密模式:CBC模式/ECB模式
// CBC模式加密
function encryptCBC(text, textKey) {
// 密鑰轉成16進制的字元串
var key = CryptoJS.enc.Utf8.parse(textKey);
// 加密過程
var encrypted = CryptoJS.DES.encrypt(text, key, {
// iv偏移量為key值
iv: key,
// 模式為CBC
mode: CryptoJS.mode.CBC,
// DES加密padding為Pkcs7
padding: CryptoJS.pad.Pkcs7
});
// 加密返回為字元串密文(加密經過一次base64加密,結果可看結果)
return encrypted.toString();
}
//對字元串中的特殊字元進行UrlEncode轉碼
function UrlEncode(str){
var ret="";
var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
var tt= "";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
//對sessionid進行加密
var desPass=encryptCBC(sessionId,mykey);
//對加密的sessionid中的特殊字元轉碼
var desPassEncode=UrlEncode(desPass);
//URL格式:http://xxxxxxxxxxxx?sessionid=&appid=&redirectUrl=~/Portals/Views/Test/index.html
var url="http://xxxxxxxxxxxx?sessionid="+desPassEncode+"&appid=&redirectUrl=~/Portals/Views/Test/index.html";
window.close();
window.open(url);
</script>
</html>
登錄後復制
注意事項:
1、crypto-js.js使用到了這個js,要記得引入,很多地方可以下載的,除了這裡面能用到des加密,也可以從網上找其他的des加密腳本,但是因為des加密模式的問題,要注意調用函數時參數的使用,確定自己要使用的是哪種des加密方法。
2、因為這里實現的是自動登錄,涉及到了url的處理,由於使用了加密,密文中會含有特殊字元,直接通過url轉跳,要把url中含有的特殊字元進行UrlEncode轉碼。
3、注意這里des的加密方式,這樣進行轉跳,跳進去的網站是.net實現的,因為des的加密模式有幾種,java,.net等默認的des加密模式有可能不一致,就會導致加密後的密文不一樣,所以要確定自己使用哪種模式,或者直接輸出加密密文來進行比較。
4、使用js比較方便的地方是因為我這里用的jsp頁面,所以對處理的數據可以任意寫,而且不會影響後台的使用,我覺得這是js的好處,特別是進行像這種進行類似單點登錄,自己系統用的java實現,而別人用的.net,直接用腳本,可以節省時間,不會對自己系統造成什麼影響。
5、有一個地方要注意,這里對url進行轉碼時,使用到了VB腳本的一些函數,這種腳本已經很少有人會用了,而且有些瀏覽器已經不支持了,網路顯示ie11不支持,但是我自己的電腦就是ie11,可以使用,所以這個也不是絕對的,有可能和使用到的函數有關。
6、除了des加密,還有md5,單獨的base64加密,這些常用的加密方式,都可以直接用js腳本實現。
7、這里只有des的一種加密模式,還有其他的,crypto-js.js中都有,可以網路下其他加密方法的使用!
Ⅳ 關於nodejs 怎麼實現 crypto des加密
就是加密和解密使用同一個密鑰,通常稱之為「Session Key 」這種加密技術在當今被廣泛採用,如美國政府所採用的DES加密標准就是一種典型的「對稱式」加密法,它的Session Key長度為56bits。
非對稱式加密:
就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為「公鑰」和「私鑰」,它們兩個必需配對使用,否則不能打開加密文件。
加密為系統中經常使用的功能,node自帶強大的加密功能Crypto,下面通過簡單的例子進行練習。
1、加密模塊的引用:
var crypto=require('crypto');
var $=require('underscore');var DEFAULTS = {
encoding: {
input: 'utf8',
output: 'hex'
},
algorithms: ['bf', 'blowfish', 'aes-128-cbc']
};
默認加密演算法配置項:
輸入數據格式為utf8,輸出格式為hex,
演算法使用bf,blowfish,aes-128-abc三種加密演算法;
2、配置項初始化:
function MixCrypto(options) {
if (typeof options == 'string')
options = { key: options };
options = $.extend({}, DEFAULTS, options);
this.key = options.key;
this.inputEncoding = options.encoding.input;
this.outputEncoding = options.encoding.output;
this.algorithms = options.algorithms;
}
加密演算法可以進行配置,通過配置option進行不同加密演算法及編碼的使用。
3、加密方法代碼如下:
MixCrypto.prototype.encrypt = function (plaintext) {
return $.rece(this.algorithms, function (memo, a) {
var cipher = crypto.createCipher(a, this.key);
return cipher.update(memo, this.inputEncoding, this.outputEncoding)
+ cipher.final(this.outputEncoding)
}, plaintext, this);
};
使用crypto進行數據的加密處理。
4、解密方法代碼如下:
MixCrypto.prototype.decrypt = function (crypted) {
try {
return $.receRight(this.algorithms, function (memo, a) {
var decipher = crypto.createDecipher(a, this.key);
return decipher.update(memo, this.outputEncoding, this.inputEncoding)
+ decipher.final(this.inputEncoding);
}, crypted, this);
} catch (e) {
return;
}
};
Ⅵ 為什麼 CryptoJS DES 加密的結果和 Java DES 不一樣
1.注意取字元串bytes是編碼保持一致,不如都用Unicode 2.key和Iv保持一致 3.加密模式和填充方式保持一致 比如C#里 algo.Mode=CipherMode.ECB; algo.Padding=PaddingMode.None; 則java里對應的為 final Cipher algo=Cipher.getInstance("DES/ECB/
Ⅶ php和js的des加密結果不一樣
加密的演算法都是一樣的,建議網上搜一個js的des加密腳本試下
Ⅷ js中常見的數據加密與解密的方法
加密在我們前端的開發中也是經常遇見的。本文只把我們常用的加密方法進行總結。不去糾結加密的具體實現方式(密碼學,太龐大了)。
常見的加密演算法基本分為這幾類,
RSA加密:RSA加密演算法是一種非對稱加密演算法。在公開密鑰加密和電子商業中RSA被廣泛使用。(這才是正經的加密演算法)
非對稱加密演算法:非對稱加密演算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
DES全稱為Data Encryption Standard,即數據加密標准,是一種使用密鑰加密的塊演算法
DES演算法的入口參數有三個:Key、Data、Mode。其中Key為7個位元組共56位,是DES演算法的工作密鑰;Data為8個位元組64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。
AES這個標准用來替代原先的DES
DES/AES我們合並在一起介紹其用法和特點
Base64是一種用64個字元來表示任意二進制數據的方法。base64是一種編碼方式而不是加密演算法。只是看上去像是加密而已(嚇唬人)。
Ⅸ 為什麼 CryptoJS DES 加密的結果和 Java DES 不一樣
最近需要對數據進行加密/解密, 因此選用了CryptoJS庫, 對數據做DES演算法的加密/解密
首選查看官方示例, 將密文進行Base64編碼, 掉進一個大坑
<script src="htt p:/ /crypto-js.googlecod e.c om/svn/tags/3.1.2/build/rollups/tripledes.js"></script>
<script>
var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");
// ciphertext changed every time you run it
// 加密的結果不應該每次都是一樣的嗎?
console.log(encrypted.toString(), encrypted.ciphertext.toString(CryptoJS.enc.Base64));
var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");
console.log(decrypted.toString(CryptoJS.enc.Utf8));
</script>
對這些加密演算法不了解, 只能求助Google
des encrypion: js encrypted value does not match the java encrypted value
In cryptoJS you have to convert the key to hex and useit as word just like above (otherwise it will be considered as passphrase)
For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key.
原來是我指定key的方式不對, 直接將字元串做為參數, 想當然的以為這就是key, 其實不然, CryptoJS會根據這個字元串算出真正的key和IV(各種新鮮名詞不解釋, 問我也沒用, 我也不懂 -_-")
那麼我們只需要將key和iv對應的字元串轉成CryptoJS的WordArray類型, 在DES加密時做為參數傳入即可, 這樣對Message這個字元串加密, 每次得到的密文都是YOa3le0I+dI=
var keyHex = CryptoJS.enc.Utf8.parse('abcd1234');
var ivHex = CryptoJS.enc.Utf8.parse('inputvec');
var encrypted = CryptoJS.DES.encrypt('Message', keyHex, { iv: ivHex });
這樣是不是就萬事OK了? 哪有, 誰知道這坑是一個接一個啊.
我們再試試Java這邊的DES加密是不是和這個結果一樣, 具體實現請參考Simple Java Class to DES Encrypt Strings
果真掉坑裡了, Java通過DES加密Message這個字元串得到的結果是8dKft9vkZ4I=和CryptoJS算出來的不一樣啊...親
繼續求助Google
C# and Java DES Encryption value are not identical
SunJCE provider uses ECB as the default mode, and PKCS5Padding as the default padding scheme for DES.(JCA Doc)
This means that in the case of the SunJCE provider,
Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding");
and
Cipher c1 = Cipher.getInstance("DES");
are equivalent statements.
原來是CryptoJS進行DES加密時, 默認的模式和padding方式和Java默認的不一樣造成的, 必須使用ECB mode和PKCS5Padding, 但是CryptoJS中只有Pkcs7, 不管了, 試試看...
<script src="htt p:/ /crypto-js.googleco de.c om/svn/tags/3.1.2/build/rollups/tripledes.js"></script>
<script src="ht tp:/ /crypto-js.googleco de.c om/svn/tags/3.1.2/build/components/mode-ecb.js"></script>
<script>
var keyHex = CryptoJS.enc.Utf8.parse('abcd1234');
var encrypted = CryptoJS.DES.encrypt('Message', keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted.toString(), encrypted.ciphertext.toString(CryptoJS.enc.Base64));
</script>
咦...使用Pkcs7能得到和Java DES一樣的結果了, 哇塞...好神奇
那我們試試統一Java也改成Cipher.getInstance("DES/ECB/PKCS7Padding")試試, 結果得到一個大大的錯誤
Error:java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/ECB/PKCS7Padding
沒辦法, 繼續Google
java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/ECB/PKCS7PADDING
I will point out that PKCS#5 and PKCS#7 actually specify exactly the same type of padding (they are the same!), but it's called #5 when used in this context. :)
這位大俠給出的解釋是: PKCS#5和PKCS#7是一樣的padding方式, 對加密演算法一知半解, 我也只能暫且認可這個解釋了.
忙完了DES的加密, 接下來就是使用CryptoJS來解密了. 我們需要直接解密DES加密後的base64密文字元串. CryptoJS好像沒有提供直接解密DES密文字元串的方法啊, 他的整個加密/解密過程都是內部自己在玩, 解密時需要用到加密的結果對象, 這不是坑我嗎?
只好研究下CryptoJS DES加密後返回的對象, 發現有一個屬性ciphertext, 就是密文的WordArray, 那麼解密的時候, 我們是不是只要提供這個就行了呢?
var keyHex = CryptoJS.enc.Utf8.parse('abcd1234');
// direct decrypt ciphertext
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse('8dKft9vkZ4I=')
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log(decrypted.toString(CryptoJS.enc.Utf8));
果不其然, 到此為止, 問題全部解決, 豁然開朗...
完整代碼請參考CryptoJS-DES.html
Use CryptoJS encrypt message by DES and direct decrypt ciphertext, compatible with Java Cipher.getInstance("DES")
Ⅹ 為什麼 CryptoJS DES 加密的結果和 Java DES 不一樣
1.注意取字元串bytes是編碼保持一致,不如都用Unicode
2.key和Iv保持一致
3.加密模式和填充方式保持一致
比如C#里
algo.Mode=CipherMode.ECB;
algo.Padding=PaddingMode.None;
則java里對應的為
final Cipher algo=Cipher.getInstance("DES/ECB/NoPadding");