Как говорится в другом ответе, асимметричное решение сложно, и вашим лучшим стандартным решением является использование симметричного шифра с коротким размером блока. Ваше ограничение до десяти символов подразумевает 60 бит с основанием 64, но вы можете использовать пользовательскую кодировку для получения 64 бит (с блочным шифром вам нужно отправить точное количество блоков).
если вы используете 64-битный размер блока, вам придется исправить IV. другими словами, если вы отправляете один и тот же номер дважды, он будет кодироваться одинаково оба раза [неправда! - См аккуратную идею в комментариях ниже. но с 32-битным блочным шифром вы можете использовать случайный IV (заполнение, чтобы скрыть повторяющиеся значения). похоже, что skip32 был бы хорошим выбором - см. Какой «хороший» алгоритм блочного шифрования имеет самый короткий вывод?
Другая, специальная идея, что я только что вытащил свою задницу и что поэтому может быть небезопасным, - это разделить ваше сообщение на две части: 32 бита и остальные. заполните остальное случайным значением, которое вы используете в качестве (заполненного нулями, если необходимо) начального числа для любого потокового шифра (http://en.wikipedia.org/wiki/Stream_cipher)), затем xor значение, которое вы хотите зашифровать, с первыми 32 битами этого (так Ваше последнее сообщение - результат 32 бит xor плюс случайное начальное число).
наконец, я понятия не имею, почему все убеждены, что эти сообщения будут / должны / должны быть небезопасными. безопасность не зависит от размера сообщения (важен размер ключа). насколько я знаю, маленькие блоки слабы против длинных сообщений. здесь у вас нет длинного сообщения (есть важное различие между возможностью угадать одно сообщение за 2 ^ 32 и знанием всех сообщений после аналогичного "небольшого" количества догадок).