導航:首頁 > 編程語言 > javajsdes加密

javajsdes加密

發布時間:2022-09-05 15:01:15

⑴ 為什麼 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/

⑵ 為什麼 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/

⑶ 請教老師DES和DES3的加解密的JS代碼

ecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
//加密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();

⑷ 為什麼 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");

⑸ 關於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;
}
};

⑹ JAVA 前端用RSA.js加密 傳到後端解密有亂碼

因為Java默認編碼是unicode,byte[]btInput=s.getBytes();獲得的是默認的unicode的byte數組。需要將這句改為byte[]btInput=s.getBytes("utf-8");就OK啦。參考網址:75637

⑺ 怎麼把mysql資料庫中現有的數據進行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")

⑻ 為什麼cryptojsdes加密的結果和javades不一樣

在啟動IPsec連接之前,內核中IP轉發功能應該被啟動.要啟動IP轉發功能,可以編輯/etc/sysctl.conf並設定net.ipv4.ip_forward為1,並用sysctl -p /etc/sysctl.conf使這一改變生效.
要啟動IPsec連接,請在各個路由器上使用下面的命令
/sbin/ifup ipsec0
連接被激活,LAN A和LAN B便可以相互交流了,因為在IPsec連接上運行ifup時路徑就通過初始化腳本被自動生成.要想顯示該網路的路徑列表,請用下面的命令:

⑼ 為什麼 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");

閱讀全文

與javajsdes加密相關的資料

熱點內容
體重小本app怎麼樣 瀏覽:777
編程語言需求 瀏覽:935
當兵體重怎麼個演算法 瀏覽:169
加密的電腦文件帶出去怎麼打開 瀏覽:849
死循環會在編譯的時候出錯嗎 瀏覽:986
c51單片機特殊寄存器的原理 瀏覽:578
閃耀永恆特利加密鑰 瀏覽:761
如何誇程序員 瀏覽:781
天津期貨python招聘 瀏覽:267
單片機機器語言寫的程序 瀏覽:554
韓國直播軟體app叫什麼名 瀏覽:920
軍營訓練不聽教官的命令 瀏覽:263
v開頭的音樂播放器是什麼APP 瀏覽:122
單片機是怎麼做出來的 瀏覽:319
博圖怎麼作為opc伺服器 瀏覽:104
編譯做題軟體 瀏覽:298
橋梁檢測pdf 瀏覽:689
化解壓力的一種方法 瀏覽:684
路由器和DSN伺服器有什麼區別 瀏覽:551
android伸縮控制項 瀏覽:861