怎样将任意长度的字符串变成16个字节的字符串?(要保证唯一性)

cuterain 2003-10-20 08:51:57
怎样将任意长度的字符串变成16个字节的字符串?
(要保证唯一性)?
...全文
518 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tavor 2004-03-15
  • 打赏
  • 举报
回复
哈哈,没看清地方,走错地方,给了错误的地方,对不起了,楼主
turnmissile 2004-03-15
  • 打赏
  • 举报
回复
byte[] txt1 = System.Text.ASCIIEncoding.ASCII.GetBytes(textData.Text);
byte[] key = System.Text.ASCIIEncoding.ASCII.GetBytes(textKey.Text);
//’声明加密类,既使用何种加密方法
System.Security.Cryptography.HMACSHA1 hma = new System.Security.Cryptography.HMACSHA1(key);
//进行加密转换
System.Security.Cryptography.CryptoStream cStream = new System.Security.Cryptography.CryptoStream(System.IO.Stream.Null, hma, System.Security.Cryptography.CryptoStreamMode.Write);

//将加密后的数据保存在TXT1这个变量中
//’此时的txt1已经不是先前的要加密的文字,而是被刷新后的已经加密的数据。
cStream.Write(txt1, 0 , txt1.Length);
cStream.Close();
//’显示加密的文字。
textCryptography.Text = System.Text.ASCIIEncoding.ASCII.GetString(hma.Hash);

如果要变成16字节的就没有办法了,也不可能保证唯一性,嗬嗬,如果有那东西,那不是所有的文件都可以压缩成16字节的文件了吗?

上面是一个HMACSHA1的加密。
tavor 2004-03-14
  • 打赏
  • 举报
回复
private string getCountStr(string str,int count)
{
byte [] bwrite=Encoding.GetEncoding("GB2312").GetBytes(str.ToCharArray());
if(bwrite.Length>=count)
return Encoding.Default.GetString( bwrite,0,count);
else return Encoding.Default.GetString(bwrite);
}
上面的这个方法就可以获得一个字符串中相应的字节数的子串。

比如:
str1="这真的是一个好人吗?" ;
str2="abcdefghijklmnopqrs";
分别调用上述函数,
str1=getCountStr(str1,16);
str2=getCountStr(str2,16);
就会返回
str1的值为 "这真的是一个好人"
str2的值为 "abcdefghijklmnop"

不过我做这里用的时英文操作系统,用的时候绝对没有问题,就是16个字节的.
没试过在别的系统下,如果有必要的话,你调整一下getCountStr中的编码方式


老大,写的够详细了吧。呵呵,快结帖给分吧
cuterain 2003-11-07
  • 打赏
  • 举报
回复
TO:Montaque(侯永锋 [MVP])
System.Security.Cryptography.HashAlgorithm
我去看看
wideroad 2003-10-21
  • 打赏
  • 举报
回复
colinfly(Colin)的分析太对了,牛!
Montaque 2003-10-21
  • 打赏
  • 举报
回复
System.Security.Cryptography.HashAlgorithm 下面的哈希算法,这是比较号的解决方案。
维她奶 2003-10-21
  • 打赏
  • 举报
回复
学习中!
xixigongzhu 2003-10-21
  • 打赏
  • 举报
回复
基本上可以保证唯一性,如果初始字符串改了一点点,出来的结果会有很大的变化。

16个字节表现的组合虽然有限,但也不少。

16个字节总共是128位,每位可能有两个值,那么可能的组合有:
2^128 = 3.4028236692093846342648111928435e+38
这个数字应该很大了。
xixigongzhu 2003-10-21
  • 打赏
  • 举报
回复
static String Convert(String str) {
MD5 md5 = MD5.Create();
byte[] bytes = md5.ComputeHash(Encoding.Unicode.GetBytes(str));
return Encoding.Unicode.GetString(bytes);
}
注意编码,其它的编码也可以。
hq1305018 2003-10-21
  • 打赏
  • 举报
回复
用md5吧,今年流行md5!呵呵
steeven 2003-10-21
  • 打赏
  • 举报
回复
赞成md5
colinfly 2003-10-20
  • 打赏
  • 举报
回复
如果是任意长度的话,那要保证唯一性基本是不可能的。因为16字节能表现的组合是有限的。不清楚你是用于哪种情况。
顾君彦 2003-10-20
  • 打赏
  • 举报
回复
用MD5算法或hash算法等做摘要算法试试。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧