Решение только с String.format
:
System.out.println(String.format("%-14s$%,.2f","Income",50000.));
будет напечатано Income $50,000.00
Алгоритм RSA не обязательно устарел, но важен размер ключа. Это все еще регулярно используется повсеместно. Длина ключа RSA 3072 бит должна использоваться, если требуется защита после 2030 года. Это всего лишь функция улучшения вычислительной мощности, а не слабость алгоритма.
Я смотрел на LockBox до того, как SongBeamer начал его поддерживать (Delphi 2007). Я обнаружил, что RSA нестабилен - просто сбой или время от времени выдает неправильные результаты. Возможно, это было исправлено с тех пор. Если вы собираетесь его использовать, убедитесь, что он поддерживает необходимую длину ключей, а затем создайте несколько автоматических тестов с известными входами и выходами. Убедитесь, что он работает стабильно. Если это так, то используйте его всеми средствами.
Вы также можете использовать Microsoft Crypto API для шифрования RSA. Я написал оболочку для Delphi 2007 , но не обновил ее для Unicode (я знаю, как мне не стыдно). Кто-то еще может обновить его, чтобы легко работать с Юникодом.
Другим вариантом может быть использование криптографических функций .NET Framework через взаимодействие с COM или что-то еще.
Привет, Брюс! Я использую эту библиотеку начиная с Delphi 5,
Delphi Encryption Compedium Part I v.5.2
Является бесплатным и с кодом Sorce, к сожалению, не реализует RSA.
Похоже, что D2010 работает сделано :
TurboPower LockBox . Шифрование данных . 4 сентября 2009 г. . Загрузить
Статус: Должно работать нормально.
Эта библиотека была расширена и теперь поддерживает шифрование Ansi и UnicodeStrings.
04.09.2009
* Пакеты Delphi 2010
* должен компилироваться без подсказок и предупреждений
Как упоминал Аргалатыр, DCPCrypt работает с Delphi 2009, но не поддерживает RSA;
ChillKat поддерживает RSA и AES для Delphi, но это не бесплатно;
Сергей Кириченко сделал бесплатную реализацию Rijndael, которую вы можете скачать здесь: http://rcolonel.tripod.com/dwnload/rc_rnd.zip . Файлы датированы ноябрем 2000 года, поэтому я не знаю, будет ли он работать непосредственно в более новой версии Delphi.
Раньше был zip-файл с кодом Delphi для загрузки здесь: http: //ace.ulyssis .student.kuleuven.ac.be / ~ triade / GInt / bin / RSA.zip , но разработчик, вероятно, закончил свое исследование, и университет удалил его домашнюю страницу. На этой китайской веб-странице я мог видеть содержимое файла (найдите на странице RSA.pas и щелкните ссылку).
Я не знаю точно, что вы имеете в виду под «давно в зубах» (старый?), Но я бы просто выбрал Lockbox, потому что он предоставляет все, что вам нужно. За исключением обновления 2009 года, последние официальные изменения были внесены в 2003 году. Но послушайте, если это сработает, то работает.
Для примера кода LockBox может подойти, но я бы больше не использовал его в производстве. Шифрование действительно идет «в зубах». Алгоритмы устаревают. Необнаруженные ранее недостатки, улучшенные методы криптоанализа, математические достижения, увеличивающаяся мощность процессора делают некогда безопасные алгоритмы и размеры ключей уже недостаточно безопасными. 3DES, MD5, SHA-1 уже считаются недостаточными. Атаки на AES были недавно опубликованы ( http://eprint.iacr.org/2009/374 ). Минимальный рекомендуемый размер ключа RSA теперь составляет 1024 бита, в то время как ключи 2048 и 3072 рекомендуются, если данные необходимо защищать в течение многих лет. Lockbox предлагает только ключи размером 1024 бит или меньше . Также необходимо выбрать правильный режим блочного шифрования. А класс LockBox TLbRijndael (AES) по умолчанию использует ECB, который имеет известные недостатки и не предлагает ничего, кроме CBC. Из-за важности электронной безопасности, приобретенной за эти годы, и последующих исследований как хорошими, так и плохими парнями, семилетняя библиотека действительно устарела - просто перекомпилировать ее и добавить поддержку строк UTF-16 недостаточно. Имейте в виду, что ложная безопасность хуже, чем ее отсутствие. Если системному администратору говорят, что «у нас нет никакой защиты», он сам будет работать над обеспечением безопасности (например, IPSec, VPN и т.п.). Если ему говорят: «Да, у нас есть RSA и AES!» он будет чувствовать себя нормально, даже если ваша реализация AES и RSA устарела и более не безопасна.
Вы не можете делать то, о чем просите; но вы можете «обмануть», используя тот факт, что в PHP вы можете иметь функцию с тем же именем, что и класс; эти имена не будут конфликтовать.
Итак, если вы объявили такой класс:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Затем вы можете объявить функцию, которая возвращает экземпляр этого класса - и имеет то же имя, что и класс:
function Test($param) {
return new Test($param);
}
] И теперь стало возможно использовать однострочник, как вы и просили - единственное, что вы вызываете функцию, не используя new:
$a = Test(10)->myMethod();
var_dump($a);
И это работает: вот, я получаю:
int 20
в качестве вывода.
И, что лучше, вы можете добавить в свою функцию немного phpdoc:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
Таким образом, у вас даже будут подсказки в вашей IDE - по крайней мере, с Eclipse PDT 2.x; см. скриншот:
Edit 2010-11-30: Просто для информации, несколько дней назад был отправлен новый RFC,
It seems like there are lots of free Delphi AES implementations. Feel free to add your favourites here.
There don't seem to be as many free RSA implementations, and very few libraries that offer both.
It looks like LockBox is still a pretty reasonable option. Especially since I don't need encryption that will take literally years to crack.
I think using Microsoft's Crypto API directly might be the most practical option.
Даниэле Тети выпустил коллекцию фильтров DataSnap для Delphi 2010, которая включает хеширование, шифр и сжатие. Он упоминает, что может также реализовать асимметричные шифры в будущем.
Это открытый исходный код, поэтому, пожалуйста, не стесняйтесь вносить свой вклад.