导航:首页 > 文档加密 > jsdes加密

jsdes加密

发布时间:2022-01-26 08:55:43

❶ 为什么 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的des加密用js解密解除乱码,发现2个加密出的东西不一样

JS加密和PHP加密是不同的,虽然都是md5加密,所以你不能直接判断js加密和PHP加密是否相等,毕竟是两种语言,要么都用js的加密,要么都是PHP的

❸ 关于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;
}
};

❹ nodejs 有没有类似secretkeyfactory的des算法

JAVA和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如JAVA加密后的结果在.NET中解密不出来等,由于最近项目有跨JAVA和.NET的加解密,经过我的分析调试

❺ 为什么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");

❼ 为什么 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")

❽ 关于nodejs 怎么实现 crypto des加密

varcrypto=require('crypto');
varkey='12345670';
exports.des={

algorithm:{ecb:'des-ecb',cbc:'des-cbc'},
encrypt:function(plaintext,iv){
varkey=newBuffer(key);
variv=newBuffer(iv?iv:0);
varcipher=crypto.createCipheriv(this.algorithm.ecb,key,iv);
cipher.setAutoPadding(true)//defaulttrue
varciph=cipher.update(plaintext,'utf8','base64');
ciph+=cipher.final('base64');
returnciph;
},
decrypt:function(encrypt_text,iv){
varkey=newBuffer(key);
variv=newBuffer(iv?iv:0);
vardecipher=crypto.createDecipheriv(this.algorithm.ecb,key,iv);
decipher.setAutoPadding(true);
vartxt=decipher.update(encrypt_text,'base64','utf8');
txt+=decipher.final('utf8');
returntxt;
}

};

阅读全文

与jsdes加密相关的资料

热点内容
刀片式服务器怎么连接电脑 浏览:79
矩阵计算java 浏览:231
如何把各银行app整合 浏览:877
方舟生存进化手游版如何建服务器 浏览:288
哪里购买黄金app 浏览:661
中国联通app优惠购功能在哪里 浏览:227
dream服务器密码是什么 浏览:222
程序员自救 浏览:486
cmd杀死进程命令 浏览:236
ipad激活服务器地址 浏览:452
单片机开始直流电机压降问题 浏览:17
服务器地址失败怎么办 浏览:147
安卓手机怎么下载苏联游戏 浏览:132
主教的命令 浏览:807
php判断变量为空 浏览:745
你演我猜安卓版本怎么用 浏览:910
已够app哪里看 浏览:1007
程序员怎么学会开车的技巧 浏览:785
网易邮箱如何删除服务器邮件 浏览:154
java多个泛型 浏览:276