精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-15
lonelybug 写道 我觉得不错,至少对于防止被爬虫下载flash或者之类资源的有帮助。
v1.1开始支持中文等多字节字符了,所以也可以象base64一样用来作为一般的编码数据传输。 |
|
返回顶楼 | |
发表时间:2011-10-17
不错 ,我可以从客户端传orderby 语句到后台,这下不会被看到字段名了
|
|
返回顶楼 | |
发表时间:2011-10-17
/** * 编码 * */ public static byte[] encodeBytes(byte[] content){ if(content==null || content.length==0) return null; int len = content.length; byte[] cArray = new byte[len + (int)Math.ceil(len/6.0d) + 1]; if(BLUFF){ int s = 0; int r = new Random().nextInt(26); boolean u = ((r ^ len) & 1) == 1; s = u ? 65 : 97; cArray[0] = (byte)(r + s); }else{ cArray[0] = DEF_SECRET; } byte c = 0; int n = 0; int mark = 0; int pos = 0; int segs = 0; for(int i=0; i<len; i+=6){ mark = 1+i+segs; for(int k=0; (k<6) && (pos<len); k++){ c = content[pos]; n = c ^ cArray[0]; n ^= k; cArray[mark] |= ((n>>>6)<<k); cArray[mark+k+1] = (byte)base_encode[n & MASK_64]; pos++; } segs++; cArray[mark] = (byte)base_encode[cArray[mark]]; } return cArray; } 大侠你能不能介绍一下你的这个算法,我怎么看到这个有问题呢? (byte)base_encode[n & MASK_64]; n值跟mask64与操作这样会降低精度吧,到时候还原的时候怎么还原呢? |
|
返回顶楼 | |
发表时间:2011-10-17
最后修改:2011-10-17
bao231 写道 /** * 编码 * */ public static byte[] encodeBytes(byte[] content){ if(content==null || content.length==0) return null; int len = content.length; byte[] cArray = new byte[len + (int)Math.ceil(len/6.0d) + 1]; if(BLUFF){ int s = 0; int r = new Random().nextInt(26); boolean u = ((r ^ len) & 1) == 1; s = u ? 65 : 97; cArray[0] = (byte)(r + s); }else{ cArray[0] = DEF_SECRET; } byte c = 0; int n = 0; int mark = 0; int pos = 0; int segs = 0; for(int i=0; i<len; i+=6){ mark = 1+i+segs; for(int k=0; (k<6) && (pos<len); k++){ c = content[pos]; n = c ^ cArray[0]; n ^= k; cArray[mark] |= ((n>>>6)<<k); cArray[mark+k+1] = (byte)base_encode[n & MASK_64]; pos++; } segs++; cArray[mark] = (byte)base_encode[cArray[mark]]; } return cArray; } 大侠你能不能介绍一下你的这个算法,我怎么看到这个有问题呢? (byte)base_encode[n & MASK_64]; n值跟mask64与操作这样会降低精度吧,到时候还原的时候怎么还原呢? v1.0只能编解码ASCII字符 n & MASK_64 相当于是求 n / 64的余数,而n是: c = content[pos]; n = c ^ cArray[0]; 得来的,c是一个ASCII字符,范围在0~127。 c与扰乱码cArray[0](也是一个ASCII字符)异或的结果仍然是0~127间。 所以n & MASK_64的结果保证是在码表坐标[0-63]间,而n / MASK_64(n>>>6)的结果只能是0或1,所以在编码ASCII字符时我只用了一个bit位记录每个字节mod64的情况。 v1.1版本的encode和decode方法由于要编码多字节字符(byte的可能取值范围就变为-128~127了,所以我用两个bit位来记录每字节mod64的情况) |
|
返回顶楼 | |