Java与Node.js利用AES加密解密出相同结果的方法示例

2025-05-29 0 81

前言

工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下是JavaNode.js利用AES加密解密出相同结果的方法,需要的朋友们下面来一起学习学习吧。

JAVA代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96
package g.g;

import java.security.MessageDigest;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

public class AesECB {

public static final String DEFAULT_CODING = "utf-8";

/**

* 解密

* @author lmiky

* @date 2014-2-25

* @param encrypted

* @param seed

* @return

* @throws Exception

*/

private static String decrypt(String encrypted, String seed) throws Exception {

byte[] keyb = seed.getBytes(DEFAULT_CODING);

MessageDigest md = MessageDigest.getInstance("MD5");

byte[] thedigest = md.digest(keyb);

SecretKeySpec skey = new SecretKeySpec(thedigest, "AES");

Cipher dcipher = Cipher.getInstance("AES");

dcipher.init(Cipher.DECRYPT_MODE, skey);

byte[] clearbyte = dcipher.doFinal(toByte(encrypted));

return new String(clearbyte);

}

/**

* 加密

* @author lmiky

* @date 2014-2-25

* @param content

* @param key

* @return

* @throws Exception

*/

public static String encrypt(String content, String key) throws Exception {

byte[] input = content.getBytes(DEFAULT_CODING);

MessageDigest md = MessageDigest.getInstance("MD5");

byte[] thedigest = md.digest(key.getBytes(DEFAULT_CODING));

SecretKeySpec skc = new SecretKeySpec(thedigest, "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, skc);

byte[] cipherText = new byte[cipher.getOutputSize(input.length)];

int ctLength = cipher.update(input, 0, input.length, cipherText, 0);

ctLength += cipher.doFinal(cipherText, ctLength);

return parseByte2HexStr(cipherText);

}

/**

* 字符串转字节数组

* @author lmiky

* @date 2014-2-25

* @param hexString

* @return

*/

private static byte[] toByte(String hexString) {

int len = hexString.length() / 2;

byte[] result = new byte[len];

for (int i = 0; i < len; i++) {

result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();

}

return result;

}

/**

* 字节转16进制数组

* @author lmiky

* @date 2014-2-25

* @param buf

* @return

*/

private static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < buf.length; i++) {

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex);

}

return sb.toString();

}

public static void main(String[] args) throws Exception {

System.out.println(AesECB.encrypt("fsadfsdafsdafsdafsadfsadfsadf", "1eVRiqy7b9Uv7ZMM"));

System.out.println(AesECB.decrypt("b123e2d9199598c0e3f1999dc9e723387b68e29d2b3a0d59fc7d5946c750c6b4", "1eVRiqy7b9Uv7ZMM"));

}

}

Node.js代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
var crypto = require('crypto');

exports.aes_algorithm = "aes-128-ecb";

exports.aes_secrect = "1eVRiqy7b9Uv7ZMM";

exports.encrypt = function (text) {

var cipher = crypto.createCipher(this.aes_algorithm, this.aes_secrect)

var crypted = cipher.update(text, 'utf8', 'hex')

crypted += cipher.final('hex');

return crypted;

};

exports.decrypt = function (text) {

var decipher = crypto.createDecipher(this.aes_algorithm, this.aes_secrect)

var dec = decipher.update(text, 'hex', 'utf8')

dec += decipher.final('utf8');

return dec;

};

//var hw = this.encrypt("fsadfsdafsdafsdafsadfsadfsadf");

//console.log(hw);

//console.log(this.decrypt(hw));

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java与Node.js利用AES加密解密出相同结果的方法示例 https://www.kuaiidc.com/118291.html

相关文章

发表评论
暂无评论