2016-08-04 4 views
0

Мы переносим проект сервера, закодированный с использованием NodeJs, на один закодированный на Java. Я не очень разбираюсь в криптографии, но мне нужно «перевести» следующую инструкцию на Java.Создать уникальный ключ в Java

crypto.randomBytes(32).toString('hex'); 

В основном в узле проекта они расслоение плотной использовали библиотеку JS криптографию для создания уникального ключа, и мне не нужно будет делать то же самое, ни больше, ни меньше, в Java. Кто-нибудь с криптовым знанием, которое может помочь здесь? Что было бы эквивалентом в Java?

Благодаря

+0

Хмм, возможно, SecureRandom –

ответ

1

Вы можете использовать

Random.nextBytes(byte[] bytes) 

для заполнения случайного массива байт, а затем преобразовать байты в шестнадцатеричном с использованием стратегии обсудили here

+0

'Random' не предоставляет криптографически безопасные случайные байты. Вместо этого следует использовать «SecureRandom». –

+0

Он не использует его для криптографии. ему просто нужен случайный UUID. –

+0

Коллизии с «Случайным» могут быть слишком высокими, чтобы называть результат «уникальным». Во всяком случае, ['UUID' также использует' SecureRandom' внутренне] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/UUID.java# UUID). –

1

Вы можете использовать UUID от Java:

UUID.randomUUID() 

Через быстрый поиск по Google я получил https://paragonie.com/blog/2016/05/how-generate-secure-random-numbers-in-various-programming-languages, посмотреть и для вашего случая ближе всего будет:

SecureRandom csprng = new SecureRandom(); 
byte[] randomBytes = new byte[32]; 
csprng.nextBytes(randombytes); 

Это в блоге. Надеюсь, это поможет.

+0

'нужно было бы сделать то же самое, не более, не менее, –

+0

ok вы действительно хотите передать количество байтов и сгенерировать ключ – Deceiver

+0

Да, это генерирует уникальный ключ. Этот ответ правильный. –

2

Вы могли бы использовать что-то вроде этого

import java.util.uuid; 
... 

UUID newUUID = UUID.randomUUID(); 

String.valueOf(newUUID); 

... 
0

Попробуйте следующее:

SecureRandom random = new SecureRandom(); 
new BigInteger(256, random).toString(32);