字符串加密解密,用VB写的加密,要用java解密(附VB解密源代码)。会VB与java的请进!

skywax 2003-09-17 05:01:53
因为原来网络客户端加密英文字符串时用的如下程序:
'加密
Private Function Cipher(ByVal password As String, ByVal from_text As String) As String
Const MIN_ASC = 32 ' Space.
Const MAX_ASC = 126 ' ~.
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
Dim Offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer
Dim to_text
Offset = NumericPassword(password)
Rnd -1
Randomize Offset
str_len = Len(from_text)
For i = 1 To str_len
ch = Asc(Mid$(from_text, i, 1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
Offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch + Offset) Mod NUM_ASC)
ch = ch + MIN_ASC
to_text = to_text & Chr$(ch)
End If
Next i
Cipher = to_text
End Function
'解密
Private Function Decipher(ByVal password As String, ByVal from_text As String) As String
Const MIN_ASC = 32 ' Space.
Const MAX_ASC = 126 ' ~.
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
Dim Offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer
Dim to_text
Offset = NumericPassword(password)
Rnd -1
Randomize Offset
str_len = Len(from_text)
For i = 1 To str_len
ch = Asc(Mid$(from_text, i, 1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
Offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch - Offset) Mod NUM_ASC)
If ch < 0 Then ch = ch + NUM_ASC
ch = ch + MIN_ASC
to_text = to_text & Chr$(ch)
End If
Next i
Decipher = to_text
End Function
Private Function NumericPassword(ByVal password As String) As Long
Dim value As Long
Dim ch As Long
Dim shift1 As Long
Dim shift2 As Long
Dim i As Integer
Dim str_len As Integer
str_len = Len(password)
For i = 1 To str_len
' Add the next letter.
ch = Asc(Mid$(password, i, 1))
value = value Xor (ch * 2 ^ shift1)
value = value Xor (ch * 2 ^ shift2)
shift1 = (shift1 + 7) Mod 19
shift2 = (shift2 + 13) Mod 23
Next i
NumericPassword = value
End Function

我在服务端想用java解密。但是就是因为:Rnd 这个值(生成的随机序列和java里生成的不一样) 所以没办法了!关键就是要用java写时也和上面的VB写的生成的随机数序列一样就好了。我想真的可能是没有办法一样的。因为一个是VB的,一个是java的随机生成器。
想问问,有没有办法?谢啦!!!
^_^
...全文
189 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
skywax 2003-09-19
  • 打赏
  • 举报
回复
好烦啦。
skywax 2003-09-18
  • 打赏
  • 举报
回复
看来我只有重新写加密算法,所有客户端软件都要升级了。烦啦。。。。。我晕了~~~~。。。
555
skywax 2003-09-18
  • 打赏
  • 举报
回复
不是随机数。是用的随机数序列。 每次得到的随机数序列是一样的。因为Rnd-1 ,所以每次得到的是同样的随机数序列。
zhang21cnboy 2003-09-17
  • 打赏
  • 举报
回复
没听说过,用随即数作加密的!

stonewang 2003-09-17
  • 打赏
  • 举报
回复
mark
cbhyk 2003-09-17
  • 打赏
  • 举报
回复
看这个能不能帮上忙:
http://www.china-askpro.com/msg45/qa97.shtml

摘录一部分:

一般的伪随机数都是按下面的公式计算的:
r(i) = (A * r(i-1) + B ) Mod m, i = 1, 2, ...
p(i) = r / m
这里A、B、m。例如,你可以选A = 2053、B=13849、m=2^16。虽然VB没有说明Rnd函数使用的是什么算法,但我估计也是采用的是上面的公式,只是A、B和m的取值不同罢了。而Randomize实际指定的是公式中的r(0)。
skywax 2003-09-17
  • 打赏
  • 举报
回复
当然,用java重新写一个加密解密的程序并不难,主要的是原来的程序和客户端都是用VB写的
加密方法。现在服务端要升级,要用java写解密方法,如果推翻重来,把两边的加密算法统一的话,那将是一个不小的升级工程。
所以:现在关键的是,有没有办法写一个解密的方法(用java)....
急。。。。。
如果不行,真是麻烦死我了。。。。
cbhyk 2003-09-17
  • 打赏
  • 举报
回复
看这个能不能帮上忙:
http://www.china-askpro.com/msg45/qa97.shtml

摘录一部分:

一般的伪随机数都是按下面的公式计算的:
r(i) = (A * r(i-1) + B ) Mod m, i = 1, 2, ...
p(i) = r / m
这里A、B、m。例如,你可以选A = 2053、B=13849、m=2^16。虽然VB没有说明Rnd函数使用的是什么算法,但我估计也是采用的是上面的公式,只是A、B和m的取值不同罢了。而Randomize实际指定的是公式中的r(0)。
守破之间 2003-09-17
  • 打赏
  • 举报
回复
可生成密钥文件一份,编写加密算法,用密钥对其加密。
java读取密钥文件,依据加密因子用相同的算法就可以解密。
skywax 2003-09-17
  • 打赏
  • 举报
回复
啊?! 晕了~~~~`
fast_time 2003-09-17
  • 打赏
  • 举报
回复
只好自己做随机数生成器

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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