上面是需要编码的,一个8位长的字节数组,用base64编码后再解码,出现一位不同的..
有源码的帮忙看下.是不是也是这种情况3 -102 28 -99 122 103 77 -51 
base64编码后:A5ocnXpnT80=
3 -102 28 -99 122 103 79 -51 

解决方案 »

  1.   

    LS是说要base64的src 还是我的main src ?
      

  2.   

    编码出错了,你这个字节的编码应为:A5ocnXpnTc0=解码是正确的
      

  3.   

    Base64 的话,直接使用 Apache Commons Codec 工具就可以了。
      

  4.   

    说不定你的依赖包中已经有 commons-codec-x.x.jar 文件了!
      

  5.   

    另外一个C++的程序, 一个 unsigned char[]  (因为java中没有unsigned类型,所以上面有些负值) 
    3 154 28 157 122 103 77 205
    这个字节数组用C++的程序编码之后结果是:
    A5ocnXpnTc0G
    我用commons-codec-1.4里的Base64.encodeBase64String编码出来的结果是:
    A5ocnXpnTc0=有人有C++的程序能帮忙试一下吗?看是不是有这种情况的...能解决+分.  在线等
      

  6.   

    Base64 是根据二进制转换的,这跟是不是 unsigned 有啥关系?真费电,我手工帮你转吧!3 154 28 157 122 103 77 205 拆成二进制数据为:00000011 10011010 00011100 10011101 01111010 01100111 01001101 11001101这里有 8 个字节,需要填充 1 个字节以凑足 3 的个字节的倍数。由于共有 64 位,不够 Base64 6 的倍数,最后一个 6 位分组需要在后面添加两位 0根据 Base64 重新分组:000000 111001 101000 011100 100111 010111 101001 100111 010011 011100 110100 ??????
    A      5      o      c      n      X      p      n      T      c      0      =看一下最后两组 110100 ??????1101 是剩下来的 4 位,需要补齐 6 位后为 110100
    ?????? 是填充的一组,在 Base64 中以“=”代替。我想你现在应该知道是谁对谁错了吧?Base64 对照表:0  A  16  Q  32  g  48  w
    1  B  17  R  33  h  49  x
    2  C  18  S  34  i  50  y
    3  D  19  T  35  j  51  z
    4  E  20  U  36  k  52  0
    5  F  21  V  37  l  53  1
    6  G  22  W  38  m  54  2
    7  H  23  X  39  n  55  3
    8  I  24  Y  40  o  56  4
    9  J  25  Z  41  p  57  5
    10  K  26  a  42  q  58  6
    11  L  27  b  43  r  59  7
    12  M  28  c  44  s  60  8
    13  N  29  d  45  t  61  9
    14  O  30  e  46  u  62  +
    15  P  31  f  47  v  63  /
      

  7.   


    Base64 规定了填充了几个字节就需要在 Base64 编码串后面加上多少个“=”。最多会有两个“=”,也可能没有。
      

  8.   


    同意,我这测试也是A5ocnXpnTc0=
      

  9.   

    以前一直没有仔细去看base64的算法原理,跟了一下源码,大概了解了..
    火龙果是高人.
    btw:希望有人也能用个例子说明一下blowfish算法的原理.