有谁知道类似于 base64_encode/decode 的编码/解码功能,但它只输出数字和/或字母,因为 base64 有时会输出 =,这会弄乱我的代码。谢谢
问问题
2761 次
2 回答
1
Base64 不是加密。我建议您了解加密的含义。但无论如何,听起来你想要的是 Base32 编码。在 Python 中,你可以通过做得到它
base64.b32encode(data)
编辑:base32 编码默认也使用 = 填充,但如果它导致问题,您可以简单地省略填充。
base64.b32encode(data).rstrip('=')
于 2012-07-28T13:42:59.370 回答
0
这是我为自己编写的 owncloud 应用程序创建的算法。您可以指定自己的字母表,因此可能值得一试。该实现是在 php 中,但可以很容易地移植。
/**
* @method randomAlphabet
* @brief Creates a random alphabet, unique but static for an installation
* @access public
* @author Christian Reiner
*/
static function randomAlphabet ($length)
{
if ( ! is_integer($length) )
return FALSE;
$c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxwz0123456789";
return substr ( str_shuffle($c), 0, $length );
} // function randomAlphabet
/**
* @method OC_Shorty_Tools::convertToAlphabet
* @brief Converts a given decimal number into an arbitrary base (alphabet)
* @param integer number: Decimal numeric value to be converted
* @return string: Converted value in string notation
* @access public
* @author Christian Reiner
*/
static function convertToAlphabet ( $number, $alphabet )
{
$alphabetLen = strlen($alphabet);
if ( is_numeric($number) )
$decVal = $number;
else throw new OC_Shorty_Exception ( "non numerical timestamp value: '%1'", array($number) );
$number = FALSE;
$nslen = 0;
$pos = 1;
while ($decVal > 0)
{
$valPerChar = pow($alphabetLen, $pos);
$curChar = floor($decVal / $valPerChar);
if ($curChar >= $alphabetLen)
{
$pos++;
} else {
$decVal -= ($curChar * $valPerChar);
if ($number === FALSE)
{
$number = str_repeat($alphabet{1}, $pos);
$nslen = $pos;
}
$number = substr($number, 0, ($nslen - $pos)) . $alphabet{(int)$curChar} . substr($number, (($nslen - $pos) + 1));
$pos--;
}
}
if ($number === FALSE) $number = $alphabet{1};
return $number;
}
于 2012-07-28T13:45:47.400 回答