Шифрование AES в node.js и дешифрование в Java AndroidJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Шифрование AES в node.js и дешифрование в Java Android

Сообщение Anonymous »

Я использовал ricmoo /aes-js для шифрования ответа сервера узлов, < /p>

cypher.js

"use strict";

var aesjs = require("aes-js");
var sha256 = require("js-sha256");

const getKeyArray = function() {
let buffer = sha256.arrayBuffer("mykey");
let keyArray = new Uint8Array(buffer);
const keySize = 16;
let arr = new Array();
for (var i = 0; i < keySize; i++) {
arr.push(keyArray);
}
return arr;
};

module.exports = {
getKey: function() {
return getKeyArray();
},

encrypt: function(text) {
var textBytes = aesjs.utils.utf8.toBytes(text);

// The counter is optional, and if omitted will begin at 1
var aesCtr = new aesjs.ModeOfOperation.ctr(
getKeyArray(),
new aesjs.Counter(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))
);

var counterArray = aesCtr._counter._counter.slice()

var encryptedBytes = aesCtr.encrypt(textBytes);

// To print or store the binary data, you may convert it to hex
var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);

var ivHex = aesjs.utils.hex.fromBytes(counterArray);

return ivHex + ":" + encryptedHex;
},
decrypt: function(encryptedHex) {
let split = encryptedHex.split(":");

// When ready to decrypt the hex string, convert it back to bytes
var encryptedBytes = aesjs.utils.hex.toBytes(split[1]);

let ivHex = split[0];

var ivBytes = aesjs.utils.hex.toBytes(ivHex);

var counter = new aesjs.Counter(ivBytes);

// The counter mode of operation maintains internal state, so to
// decrypt a new instance must be instantiated.
var aesCtr = new aesjs.ModeOfOperation.ctr(getKeyArray(), ivBytes);

var decryptedBytes = aesCtr.decrypt(encryptedBytes);

// Convert our bytes back into text
var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes);

return decryptedText;
}
};
< /code>

и расшифровка в java < /p>

cypher.java

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

class Cypher {
private final static char[] hexArray = "0123456789ABCDEF".toCharArray();

private static String KEY = "mykey";

/**
* Decrypt a given hex string,
* @param hexString
* @return
*/
static String decrypt(String hexString) throws Exception{
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");

String ivHex = hexString.split(":")[0];
hexString = hexString.split(":")[1];

IvParameterSpec ivSpec = new IvParameterSpec(hexStringToByteArray(ivHex));

cipher.init(Cipher.DECRYPT_MODE, getEncryptionKey(KEY), ivSpec);

byte[] decrypted = cipher.doFinal(hexStringToByteArray(hexString));

return new String(decrypted);
}

private static SecretKeySpec getEncryptionKey(String key) throws Exception {

MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(key.getBytes("UTF-8"));
byte[] keyBytes = new byte[16];
System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
return secretKeySpec;

}

static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}

static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16)

Мой вопрос: < /p>

1- этот код приведен выше или у него есть какая-либо серьезная проблема?>

Подробнее здесь: https://stackoverflow.com/questions/523 ... va-android
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Шифрование и дешифрование AES в Android
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Совместимое шифрование и дешифрование AES для C# и javascript.
    Anonymous » » в форуме C#
    0 Ответы
    50 Просмотры
    Последнее сообщение Anonymous
  • Как доказать 128-битное шифрование и дешифрование AES на Arduino [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous
  • Шифрование и дешифрование с использованием PyCrypto AES-256.
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • AES простое шифрование в узле и дешифрование в Python и наоборот.
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»