Я заметил, что очень мало, если encrypters ни, интернет файлов. Основной целью этого было бы предоставить другой метод шифрования в том, что предлагаемые вашим кошелькам. Поправьте меня, если я ошибаюсь, но клиент Bitcoin просто пароль защищает ваш кошелек и его резервные копии.
Мой интернет-файл Encrypter является Java-шифрование приложения, которое использует алгоритм AES (http://en.wikipedia.org/wiki/Advanced_Encryption_Standard), Который является является спецификацией для шифрования электронных данных, установленных в США Национальным институтом стандартов и технологий в 2001 году.
Вот ссылка на него : http://encryptjs.cloudvent.net/
Вы можете зашифровать любой файл, это может быть ваш кошелек подпорки или текстовый документ.
Предел 5МБ
Если вы играете с демо, вы заметите, что она не позволяет шифровать файлы размером более 1 МБ. Я положил предел, потому что HTML5 загрузить атрибут, который я использую, чтобы предложить зашифрованный файл для загрузки, не очень хорошо с большими объемами данных. В противном случае это приведет к вкладке врезаться в Chrome, и весь браузер к сбою при использовании Firefox. Обойти это было бы использовать System API файла и записать реальные двоичные данные, но он поддерживается только в Chrome на данный момент. Это не проблема со скоростью шифрования (что довольно быстро), но с предложением файла для загрузки.
Как насчет HTTPS?
Когда дело доходит до шифрования данных и обеспечения информации, люди, естественно ожидать, что страница будет загружена через HTTPS. В данном случае я считаю, что это не нужно, так как помимо начальной загрузки в HTML и активов, никакие данные не передаются между вами и сервером - все это делается на стороне клиента с помощью JavaScript. Если это беспокоит вас, вы можете просто скачать демо и открыть его непосредственно с вашего компьютера.
Как это работает
Содержимое файлов obained как строка Uri данных (http://en.wikipedia.org/wiki/Data_URI_scheme). Браузеры позволяют использовать эти идентификаторы URI везде обычный URL будет идти. Преимущество заключается в том, что они позволяют хранить содержимое ресурса непосредственно в URI, так что мы можем, например, добавить атрибут загрузки на него, чтобы загрузить в виде файла при нажатии.
Я использовал алгоритм AES для шифрования Ури данных с выбранным паролем, и предложить его в качестве загрузки. Обратное происходит при расшифровке его. Нет данных никогда не достигнет сервера.
Если я получаю достаточно денег, я буду обновлять сервер и поддерживать больше трафика и расширить приложение.
Исходный код
Код:
$ (Функция () {
Тело вар = $ ( 'тело'),
этап = $ ( '# стадия'),
назад = $ ( 'a.back');
/* Шаг 1 */
$ ( '# Step1 .encrypt'). Нажмите (функция () {
body.attr ( 'класс', 'шифровать');
// Переход к шагу 2
шаг 2);
});
$ ( '# Step1 .decrypt'). Нажмите (функция () {
body.attr ( 'класс', 'расшифровывать');
шаг 2);
});
/* Шаг 2 */
$ ( '# Step2 .button'). Нажмите (функция () {
// Trigger диалоговое окно браузера файлов
. $ (Это) .parent () найти ( 'вход') нажмите кнопку ().
});
// Настройка событий для файловых ресурсов
вар файл = NULL;
$ ( '# Step2'). На ( 'изменения', '# Encrypt-вход', функция (е) {
// Был ли файл был выбран?
если (e.target.files.length! = 1) {
оповещение ( «Пожалуйста, выберите файл, чтобы зашифровать!»);
вернуться ложным;
}
Файл = e.target.files [0];
если (file.size > 5120 * 5120) {
оповещение ( «Пожалуйста, выберите файлы меньшего размера, чем 5mb, в противном случае вы можете разбить ваш браузер \ nЭто известная проблема...»);
вернуть;
}
шаг 3);
});
$ ( '# Step2'). На ( 'изменения', '# расшифровка-вход', функция (е) {
если (e.target.files.length! = 1) {
оповещение ( «Пожалуйста, выберите файл для дешифрования!»);
вернуться ложным;
}
Файл = e.target.files [0];
шаг 3);
});
/* Шаг 3 */
$ ( 'A.button.process'). Выберите (функция () {
вход вар = $ (это) .parent (). найти ( 'входной [тип = пароль]'),
а = $ ( '# step4 a.download'),
пароль = input.val ();
input.val ( '');
если (password.length<5) {
оповещение ( «Пожалуйста, выберите более длинный пароль!»);
вернуть;
}
// Объект HTML5 FileReader позволит читать
// Содержимое перегонного выбранный файл.
вар читатель = новый FileReader ();
если (body.hasClass ( 'шифровать')) {
// Зашифровать файл!
reader.onload = функция (е) {
// Используйте библиотеку CryptoJS и шифр AES для шифрования
// содержимого файла, проходивший в e.target.result, с паролем
вар зашифрованы = CryptoJS.AES.encrypt (e.target.result, пароль);
// Атрибут загрузки будет вызывать содержимое HREF
// атрибут для загрузки при нажатии. Атрибут загрузки
// также содержит имя файла, который предлагается для загрузки.
a.attr ( 'HREF', 'данные: приложения / октет-поток' + зашифрованы);
a.attr ( 'загрузить', file.name + '.encrypted');
стадия (4);
};
// Это будет кодировать содержимое файла в данный-Ури.
// Это вызовет обработчик OnLoad выше, в результате
reader.readAsDataURL (файл);
}
еще {
// Расшифровать его!
reader.onload = функция (е) {
вар расшифрованы = CryptoJS.AES.decrypt (e.target.result, пароль)
.ToString (CryptoJS.enc.Latin1);
если (! / ^ данные:. / тест (расшифрован)) {
оповещение ("Invalid парольной фразы или файл! Пожалуйста, попробуйте еще раз.");
вернуться ложным;
}
a.attr ( 'HREF', расшифрованы);
a.attr ( 'загрузить', file.name.replace ( '') 'зашифрованы.');
стадия (4);
};
reader.readAsText (файл);
}
});
/ * Кнопка возврата * /
back.click (функция () {
// Инициализировать скрытые входы файлов,
// так, что они не держат выбор
// в прошлый раз
$ ( '# Step2 вход [тип = файл]'). ReplaceWith (функция () {
вернуть $ (это) .clone ();
});
шаг 1);
});
// Вспомогательная функция, которая перемещает окно просмотра на правильный шаг DIV
ступенчатая функция (я) {
если (я == 1) {
back.fadeOut ();
}
еще {
back.fadeIn ();
}
// Переместить #stage DIV. Изменение верхней собственности вызовет
// CSS-переход на элементе. я-1, потому что мы хотим
// шаги, чтобы начать с 1:
stage.css ( 'сверху', (- (I-1) * 100) + '%');
}
});
Тело вар = $ ( 'тело'),
этап = $ ( '# стадия'),
назад = $ ( 'a.back');
/* Шаг 1 */
$ ( '# Step1 .encrypt'). Нажмите (функция () {
body.attr ( 'класс', 'шифровать');
// Переход к шагу 2
шаг 2);
});
$ ( '# Step1 .decrypt'). Нажмите (функция () {
body.attr ( 'класс', 'расшифровывать');
шаг 2);
});
/* Шаг 2 */
$ ( '# Step2 .button'). Нажмите (функция () {
// Trigger диалоговое окно браузера файлов
. $ (Это) .parent () найти ( 'вход') нажмите кнопку ().
});
// Настройка событий для файловых ресурсов
вар файл = NULL;
$ ( '# Step2'). На ( 'изменения', '# Encrypt-вход', функция (е) {
// Был ли файл был выбран?
если (e.target.files.length! = 1) {
оповещение ( «Пожалуйста, выберите файл, чтобы зашифровать!»);
вернуться ложным;
}
Файл = e.target.files [0];
если (file.size > 5120 * 5120) {
оповещение ( «Пожалуйста, выберите файлы меньшего размера, чем 5mb, в противном случае вы можете разбить ваш браузер \ nЭто известная проблема...»);
вернуть;
}
шаг 3);
});
$ ( '# Step2'). На ( 'изменения', '# расшифровка-вход', функция (е) {
если (e.target.files.length! = 1) {
оповещение ( «Пожалуйста, выберите файл для дешифрования!»);
вернуться ложным;
}
Файл = e.target.files [0];
шаг 3);
});
/* Шаг 3 */
$ ( 'A.button.process'). Выберите (функция () {
вход вар = $ (это) .parent (). найти ( 'входной [тип = пароль]'),
а = $ ( '# step4 a.download'),
пароль = input.val ();
input.val ( '');
если (password.length<5) {
оповещение ( «Пожалуйста, выберите более длинный пароль!»);
вернуть;
}
// Объект HTML5 FileReader позволит читать
// Содержимое перегонного выбранный файл.
вар читатель = новый FileReader ();
если (body.hasClass ( 'шифровать')) {
// Зашифровать файл!
reader.onload = функция (е) {
// Используйте библиотеку CryptoJS и шифр AES для шифрования
// содержимого файла, проходивший в e.target.result, с паролем
вар зашифрованы = CryptoJS.AES.encrypt (e.target.result, пароль);
// Атрибут загрузки будет вызывать содержимое HREF
// атрибут для загрузки при нажатии. Атрибут загрузки
// также содержит имя файла, который предлагается для загрузки.
a.attr ( 'HREF', 'данные: приложения / октет-поток' + зашифрованы);
a.attr ( 'загрузить', file.name + '.encrypted');
стадия (4);
};
// Это будет кодировать содержимое файла в данный-Ури.
// Это вызовет обработчик OnLoad выше, в результате
reader.readAsDataURL (файл);
}
еще {
// Расшифровать его!
reader.onload = функция (е) {
вар расшифрованы = CryptoJS.AES.decrypt (e.target.result, пароль)
.ToString (CryptoJS.enc.Latin1);
если (! / ^ данные:. / тест (расшифрован)) {
оповещение ("Invalid парольной фразы или файл! Пожалуйста, попробуйте еще раз.");
вернуться ложным;
}
a.attr ( 'HREF', расшифрованы);
a.attr ( 'загрузить', file.name.replace ( '') 'зашифрованы.');
стадия (4);
};
reader.readAsText (файл);
}
});
/ * Кнопка возврата * /
back.click (функция () {
// Инициализировать скрытые входы файлов,
// так, что они не держат выбор
// в прошлый раз
$ ( '# Step2 вход [тип = файл]'). ReplaceWith (функция () {
вернуть $ (это) .clone ();
});
шаг 1);
});
// Вспомогательная функция, которая перемещает окно просмотра на правильный шаг DIV
ступенчатая функция (я) {
если (я == 1) {
back.fadeOut ();
}
еще {
back.fadeIn ();
}
// Переместить #stage DIV. Изменение верхней собственности вызовет
// CSS-переход на элементе. я-1, потому что мы хотим
// шаги, чтобы начать с 1:
stage.css ( 'сверху', (- (I-1) * 100) + '%');
}
});
Это мой Bitcoin адрес, если кто-то хочет пожертвовать: 16kvdtewUwvadNPk29AfyLkAbpyLrCJ3XU
С Уважением,
Duff___Man