用js实现des代码(DES算法的实现代码)

本文目录一览:

请教老师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();

python中如何调用js文件中的方法呢

1、打开pycharm开发工具,点击File菜单,选择Settings…,进行第三方模块安装;输入selenium,点击Install Package。

2、接着在python项目的指定文件夹下,鼠标右键新建python文件,输入文件名并点击Python file。

3、打开新建的文件,依次导入selenium、webdriver和time。

4、调用webdriver模块中的Chrome(),使用get()获取对应网址的内容。

5、调用find_element_by_id()获取对应页面元素,然后调用按钮点击事件。

6、修改get()方法中的请求路径,然后保存代码并运行文件,查看运行结果。

为什么 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加密

就是加密和解密使用同一个密钥,通常称之为“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 $.reduce(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 $.reduceRight(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;

}

};

原创文章,作者:GY6JQ,如若转载,请注明出处:https://www.506064.com/n/129990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GY6JQGY6JQ
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相关推荐

  • JS Proxy(array)用法介绍

    JS Proxy(array)可以说是ES6中非常重要的一个特性,它可以代理一个数组,监听数据变化并进行拦截、处理。在实际开发中,使用Proxy(array)可以方便地实现数据的监…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29

发表回复

登录后才能评论