C# 加密一个逗号分隔的ID列表会使它变小,以适应cookie吗?
假设我想将ID存储在cookie中: 1231232344323444222342 看到一个cookie有4kb的限制或其他什么,加密该值会允许更多的存储吗C# 加密一个逗号分隔的ID列表会使它变小,以适应cookie吗?,c#,encryption,cookies,compression,C#,Encryption,Cookies,Compression,假设我想将ID存储在cookie中: 1231232344323444222342 看到一个cookie有4kb的限制或其他什么,加密该值会允许更多的存储吗 如果是,哪种加密方式最好?不是真的担心安全性,只是想用更少的占用空间存储更多的数据。加密不一定会压缩,通常不会,而且任何压缩都可以不用加密 我建议您寻找一种简单的方法来高效地存储这样的简单数据。加密不一定会压缩,通常不会,而且您所做的任何压缩都可以在不加密的情况下完成 我建议您寻找一种简单的方法来高效地存储这样的简单数据。加密本身不会压缩数
如果是,哪种加密方式最好?不是真的担心安全性,只是想用更少的占用空间存储更多的数据。加密不一定会压缩,通常不会,而且任何压缩都可以不用加密
我建议您寻找一种简单的方法来高效地存储这样的简单数据。加密不一定会压缩,通常不会,而且您所做的任何压缩都可以在不加密的情况下完成
我建议您寻找一种简单的方法来高效地存储这样的简单数据。加密本身不会压缩数据。你可以考虑压缩它。请记住,不同的值会压缩不同的量,因此,如果您接近可以压缩的极限,您可能会发现它有时不适合。如果您的空间不足,您可能需要寻找一种不同的方法
请注意,加密后无法对其进行有意义的压缩。加密会将其变成看似随机的数据,而不适于压缩。加密本身不会压缩数据。你可以考虑压缩它。请记住,不同的值会压缩不同的量,因此,如果您接近可以压缩的极限,您可能会发现它有时不适合。如果您的空间不足,您可能需要寻找一种不同的方法
请注意,加密后无法对其进行有意义的压缩。加密将其变成看似随机的数据,而不适合压缩。使用4k字节,您可以存储819个四位数的数字。你确定你真的需要储存更多吗
如果只在cookie中存储一个密钥,通过一个简单的DB查询就可以找到超长的数字序列,这不是更容易吗?使用4k字节,可以存储819个四位数的数字。你确定你真的需要储存更多吗
如果只在cookie中存储一个密钥,通过简单的DB查询就可以找到超长的数字序列,这不是更容易吗?如果您只对压缩数据感兴趣,那么可以使用.Net中的流压缩类 如果您只对压缩数据感兴趣,可以使用.Net中的流压缩类 您可以使用VInt/Vlong实现对每个数字进行少量压缩。压缩将因数据而异。较高的id将产生较低的压缩 下面是一个使用vint的实现:
class CookieConverter
{
private readonly Encoding _enc = Encoding.GetEncoding("iso-8859-1");
public string PackCookieString(List<int> numbers)
{
MemoryStream memoryStream = new MemoryStream();
foreach (int number in numbers)
{
byte[] bytes = GetVIntBytes(number);
memoryStream.Write(bytes, 0, bytes.Length);
}
return _enc.GetString(memoryStream.ToArray());
}
public List<int> UnpackCookieString(string cookie)
{
byte[] bytes = _enc.GetBytes(cookie);
List<int> numbers = new List<int>();
int startIndex = 0;
while (startIndex < bytes.Length)
{
numbers.Add(GetVInt(bytes, ref startIndex));
}
return numbers;
}
public byte[] GetVIntBytes(int value)
{
byte[] buffer = new byte[5];
byte length = 0;
while ((value & ~0x7F) != 0)
{
buffer[length] = (byte) ((value & 0x7f) | 0x80);
value = value >> 7;
length++;
}
buffer[length] = (byte) value;
byte[] result = new byte[length+1];
Array.Copy(buffer, 0, result, 0, result.Length);
return result;
}
public int GetVInt(byte[] buffer, ref int startIndex)
{
byte b = buffer[startIndex];
startIndex++;
int i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7)
{
b = buffer[startIndex];
i |= (b & 0x7F) << shift;
startIndex++;
}
return i;
}
您可以尝试使用VInt/Vlong实现对每个数字进行少量压缩。压缩将因数据而异。较高的id将产生较低的压缩 下面是一个使用vint的实现:
class CookieConverter
{
private readonly Encoding _enc = Encoding.GetEncoding("iso-8859-1");
public string PackCookieString(List<int> numbers)
{
MemoryStream memoryStream = new MemoryStream();
foreach (int number in numbers)
{
byte[] bytes = GetVIntBytes(number);
memoryStream.Write(bytes, 0, bytes.Length);
}
return _enc.GetString(memoryStream.ToArray());
}
public List<int> UnpackCookieString(string cookie)
{
byte[] bytes = _enc.GetBytes(cookie);
List<int> numbers = new List<int>();
int startIndex = 0;
while (startIndex < bytes.Length)
{
numbers.Add(GetVInt(bytes, ref startIndex));
}
return numbers;
}
public byte[] GetVIntBytes(int value)
{
byte[] buffer = new byte[5];
byte length = 0;
while ((value & ~0x7F) != 0)
{
buffer[length] = (byte) ((value & 0x7f) | 0x80);
value = value >> 7;
length++;
}
buffer[length] = (byte) value;
byte[] result = new byte[length+1];
Array.Copy(buffer, 0, result, 0, result.Length);
return result;
}
public int GetVInt(byte[] buffer, ref int startIndex)
{
byte b = buffer[startIndex];
startIndex++;
int i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7)
{
b = buffer[startIndex];
i |= (b & 0x7F) << shift;
startIndex++;
}
return i;
}
你要的是压缩,不是加密。你可以尝试哈夫曼编码,但在这里,每个字符似乎都是相同的,所以这对你没有多大好处。好奇你最终得到了什么解决方案?你在寻找压缩,而不是加密。你可以尝试哈夫曼编码,但在这里,每个字符似乎都有相同的可能性,所以这对你没有多大好处。好奇你最终得到了什么解决方案?