2010-08-07 2 views
2

Мне нужно создать границу для нескольких частей загрузитьГенерация случайной строки без SecureRandom

post << "--#{BOUNDARY}\r\n" 
    post << "Content-Disposition: form-data; name=\"datafile\"; filename=\"#{filename}\"\r\n" 
    post << "Content-Type: text/plain\r\n" 
    post << "\r\n" 
    post << file 
    post << "\r\n--#{BOUNDARY}--\r\n" 

граничный должен быть случайной строка (не присутствует в файле).

В рельсах, я мог бы сделать SecureRandom.hex (10)

Кто я могу сделать это без загрузки ActiveSupport?

+0

Почему это должно быть случайным? – sepp2k

+0

Я не могу использовать предварительно сгенерированную строку Boundary, потому что, если мой загруженный файл содержит строку, мне нужно сгенерировать новую. –

ответ

5

Если вам нужен случайный буквенно-цифровую строку, использовать что-то вроде:

rand(10000000000000).floor.to_s(36) 

Это сделает случайное число (изменение множителя чтобы сделать строку длиннее) и представить ее в radix 36 (10 номеров + 26 букв).

Для строки Base64, вы могли бы сделать что-то вроде

require 'base64' 
Base64.encode64(rand(10000000000000).to_s).chomp("=\n") 

Если вам нужны строки фиксированной длины, играть со случайным диапазоном номеров вы подачи, используя что-то вроде + рандов 1000000 (10000000) ,

+2

rand (10 ** 30) .to_s (36) сделал трюк! –

0

Последний раз я использовал MD5 на рандов, как это:

require 'md5' 
random_string = MD5.md5(rand(1234567).to_s).to_s 
0

если вы хотите случайные буквенно-цифровую строку, то, что вы можете сделать, как показано ниже

o = [('a'..'z'),('A'..'Z'),('0'..'9')].map{|i| i.to_a}.flatten 
string = (0...50).map{ o[rand(o.length)] }.join 

Это также будет генерировать буквенно-цифровой случайную строку

rand(36**length).to_s(36) 

Вы также можете передать «длину», чтобы генерировать размер случайной строки. Пример 8 или 10

Смежные вопросы