求个加密算法(新浪微博的地址加密)

mfkiqpl 2011-02-11 02:00:51
新浪的微博,地址是:
http://t.sina.com.cn/1768249682/5en0QADigwX
这样的形式。其中:5en0QADigwX 是微薄ID [2011102021594353451]的加密形式。。

求这种加密算法和解密方法。。

下面是我提取出来的一些对照。感觉有规律确有没规律。。请高手指教。。

5en0QADigwX 2011102021594353451
5en0ut7kXFL 2011101171254995945
5en0ucWhzyV 2011101161224188281
5en0Sqlz6Sl 2011102092098367913
5en0SabAyNU 2011102082078713598

5KD0uZqzhPp 2211101191288410015
5KD0tHh2YRK 2211101141590710628
5KD0SqlpqtY 2211102092096060002
5KD0SpHsF5x 2211102091696831131
5KD0SqjCJxN 2211102092079231539
5KD0SabppyZ 2211102082076056469
5KD0RDSrZiU 2211102062046670512

Bh0tojqYWq 231101129836430790
Bh0to846li 231101129720977696
wr0tojuFIl 201101129837310193
zF0to7wKxY 221101129717805426
wr0t9DEmoG 201101120739619218
wr0t810gEj 201101119730064003

希望能遇到高人授之以渔。。谢谢
...全文
852 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonepeter 2011-09-24
  • 打赏
  • 举报
回复
/// <summary>
/// 将某一条新浪微博地址转换成这条微博的ID
/// </summary>
/// <param name="url">一条微博地址</param>
/// <returns>微博ID</returns>
public string TweeterUrlToId(string url)
{
url = url.Trim().Substring(url.LastIndexOf("/") + 1);//取得url地址后的62进制数【5KD0TcOcJsZ】
string[] surl = new string[3];
surl[2] = String60To10(url.Substring(url.Length - 4));//倒数第三段,取4位,转10进制
surl[1] = String60To10(url.Substring(url.Length - 8, 4));//倒数第二段,取4位,转10进制
surl[0] = String60To10(url.Substring(0, url.Length - 8));//第一段,取剩下位数,转10进制
surl[2] = PadLeftToLengthSeven(surl[2]);
surl[1] = PadLeftToLengthSeven(surl[1]);

return surl[0] + surl[1] + surl[2];//合并三段,返回
}

/// <summary>
/// 用0补齐7位长度
/// </summary>
/// <param name="str">源串可能长度小于7</param>
/// <returns>返回长度为7的串</returns>
private string PadLeftToLengthSeven(string str)
{
if (str.Length < 7)
{
str = str.PadLeft(7, '0');
}
return str;
}

private string String60To10(string str62)
{//62进制转10进制
Int64 i64 = 0;
for (int i = 0; i < str62.Length; i++)
{
Int64 Vi = (Int64)Math.Pow(62, (str62.Length - i - 1));
char t = str62[i];
i64 += Vi * String62Dictionary(t.ToString());
}
return i64.ToString();
}
private Int64 String62Dictionary(string ks)//62进制字典
{
string[] keys = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
int i = 0;
foreach (string k in keys)
{
if (ks == k) { return i; }
i++;
}
return 0;
}
stonepeter 2011-09-24
  • 打赏
  • 举报
回复
最新版本!
/// <summary>
/// 将某一条新浪微博地址转换成这条微博的ID
/// 原文地址 http://www.oschina.net/code/snippet_122551_3401
/// 但是新浪已经将微博地址升级了.
/// </summary>
/// <param name="url">一条微博地址</param>
/// <returns>微博ID</returns>
public string TweeterUrlToId(string url)
{
url = url.Trim().Substring(url.LastIndexOf("/") + 1);//取得url地址后的62进制数【5KD0TcOcJsZ】
string[] surl = new string[3];
surl[2] = String60To10(url.Substring(url.Length - 4));//倒数第三段,取4位,转10进制
surl[1] = String60To10(url.Substring(url.Length - 8, 4));//倒数第二段,取4位,转10进制
surl[0] = String60To10(url.Substring(0, url.Length - 8));//第一段,取剩下位数,转10进制
return surl[0] + surl[1] + surl[2];//合并三段,返回
}
private string String60To10(string str62)
{//62进制转10进制
Int64 i64 = 0;
for (int i = 0; i < str62.Length; i++)
{
Int64 Vi = (Int64)Math.Pow(62, (str62.Length - i - 1));
char t = str62[i];
i64 += Vi * String62Dictionary(t.ToString());
}
return i64.ToString();
}
private Int64 String62Dictionary(string ks)//62进制字典
{
string[] keys = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
int i = 0;
foreach (string k in keys)
{
if (ks == k) { return i; }
i++;
}
return 0;
}
sjqzone 2011-09-07
  • 打赏
  • 举报
回复
求最新算法。
wcwangwc 2011-07-20
  • 打赏
  • 举报
回复
3f4CYmyz7s-> 3f 4CYm yz7s
Neil_Li 2011-03-15
  • 打赏
  • 举报
回复
7519224501
zF4klhuSBD

7510987001
wr4k Ffoya

7328923203
3J4CXYkb4T

7368554725
5KD0W3YBYN0

7405265679
3z4 CY m701M

7412340075
3z4CYmmonO

7417924747
3J4CYmy51A

7417898739
3f4CYm vEch

7417861329
3f4CYmyz7s

7418000151
3f4CYmyKnQ

7417928361
3f4CYmA1pb

求最新算法
GooKit 2011-02-13
  • 打赏
  • 举报
回复

诡异……
mfkiqpl 2011-02-12
  • 打赏
  • 举报
回复
交作业,送上反64进制的C#代码。。


private void button1_Click(object sender, EventArgs e)//使用
{//by mfkiqpl
string ss = "http://t.sina.com.cn/1235919683/5KD0TcOcJsZ";//舒畅的某条微博
richTextBox1.AppendText(
sinaWburl2ID(ss) //进行转换后得到真实微博ID是:2211102122143034713
);
}
private string sinaWburl2ID(string url) {
url = url.Substring(url.LastIndexOf("/") + 1);//取得url地址后的62进制数【5KD0TcOcJsZ】
string[] surl = new string[4];
surl[3] = str62to10(url.Substring(url.Length-4));//倒数第四段,取4位,转10进制
surl[2] = str62to10(url.Substring(url.Length - 7, 3));//倒数第二段,取3位,转10进制
surl[1] = str62to10(url.Substring(url.Length - 8, 1));//倒数第三段,取1位,转10进制
surl[0] = str62to10(url.Substring(0, url.Length - 8));//第一段,取剩下位数,转10进制
if (surl[3].Length < 7) { surl[3] = surl[3].PadLeft(7, '0'); }//倒数第四段10进制数不足7位 左边补0 满足7位
if (surl[2].Length < 6) { surl[2] = surl[2].PadLeft(6, '0'); }//倒数第三段10进制数不足6位 左边补0 满足6位
return surl[0] + surl[1] + surl[2] + surl[3];//合并四段,返回
}
private string str62to10(string str62) {//62进制转10进制
Int64 i64=0;
for (int i = 0; i < str62.Length; i++) {
Int64 Vi = (Int64)Math.Pow(62, (str62.Length - i - 1));
char t = str62[i];
i64 += Vi * str62keys(t.ToString());
}
return i64.ToString();
}
private Int64 str62keys(string ks)//62进制字典
{
string[] keys ={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
int i = 0;
foreach (string k in keys) {
if (ks==k) { return i; }
i++;
}
return 0;
}
mfkiqpl 2011-02-11
  • 打赏
  • 举报
回复
感谢楼主2位热心的朋友。。
确实如:sbwwkmyd 说。是62进制的加密。。感谢。。
mathe 2011-02-11
  • 打赏
  • 举报
回复
原来两批数据长度不相等,我以为长度相等,所以淘汰了62进制
showjim 2011-02-11
  • 打赏
  • 举报
回复
62进制(0-9a-zA-Z)

5en 0 QAD igwX => 20111 0 202159 4353451
5en 0 ut7 kXFL => 20111 0 117125 4995945
5en 0 ucW hzyV => 20111 0 116122 4188281
5en 0 Sql z6Sl => 20111 0 209209 8367913
5en 0 Sab AyNU => 20111 0 208207 8713598

5KD 0 uZq zhPp => 22111 0 119128 8410015
5KD 0 tHh 2YRK => 22111 0 114159 0710628
5KD 0 Sql pqtY => 22111 0 209209 6060002
5KD 0 SpH sF5x => 22111 0 209169 6831131
5KD 0 Sqj CJxN => 22111 0 209207 9231539
5KD 0 Sab ppyZ => 22111 0 208207 6056469
5KD 0 RDS rZiU => 22111 0 206204 6670512

Bh 0 toj qYWq => 2311 0 112983 6430790
Bh 0 to8 46li => 2311 0 112972 0977696
wr 0 toj uFIl => 2011 0 112983 7310193
zF 0 to7 wKxY => 2211 0 112971 7805426
wr 0 t9D EmoG => 2011 0 112073 9619218
wr 0 t81 0gEj => 2011 0 111973 0064003
mathe 2011-02-11
  • 打赏
  • 举报
回复
这里也说明了在IT开发中算法知识学习的重要性。向这个IT民工时的单向陷门函数,看似解决了问题,但是是很容易出问题
mathe 2011-02-11
  • 打赏
  • 举报
回复
这种应该称为单向陷门函数而不是加密,也就是我们只要随便弄个乱七八糟(越乱越好)的函数,将一个数据映射到另外一个数据就行了。只要函数足够乱,那么找逆函数就很难了。比如著名的md5就属于这个类型。
不过这里的数据看上去像是分段使用某个函数,函数强大不大. 第一他将输入的前6位映射到输出的前4位,然后好像输入接下去6位映射到输出中间3位,所以还有可能输入的最后6为映射到输出的最后4位.所以你可以先设计一些数据测试一些是否如此,如果如此,那么这三个映射之间是否关联(比如是否实际上是一个函数)。
然后对这三个映射可以采样大量数据(由于输入样本总共最多1000000个),最差情况可以列一个穷举列表就可以破解了。其实他们应该采用现成的单向陷门函数如md5,那么就基本上不可以求逆了

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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