java - 如何修复分组密码实现错误
问题描述
解密时,我每三行才进入正确的初始状态
我将源文本分成 64 位的块,然后在它们之间进行位的替换,但是在解密时,输出的文本与原始文本不同。只有每三行是真的
byte[] bin = text.getBytes("UTF8");
ArrayList<Byte> binary = new ArrayList<Byte>();
for (int i=0; i<bin.length; i++){
binary.add(bin[i]);
}
if(binary.size()%64!=0){
while (binary.size()%64 !=0){
binary.add(bin[0]);
}
}
ArrayList<Byte> list =new ArrayList<>();
for(int i=0; i<binary.size(); i++){
if (i%64!=0){
list.add(binary.get(i));
}
else{
for(int l = 0; l < list.size()/2; l++) {
if (list.get(l) >= list.get(list.size()-1-l)) {
list.set(l, list.get(list.size()-1-l));
list.set(list.size()-1-l, list.get(l));
}
}
for(int p = 0; p < list.size(); p++) {
itogovy.add(list.get(p));
}
list.clear();
}
}
byte[] result = new byte[itogovy.size()];
for (int v=0; v<itogovy.size(); v++ ){
result[v]=itogovy.get(v);
}
sun.misc.BASE64Encoder unsupportedEncoder = new sun.misc.BASE64Encoder();
sunEncoded = unsupportedEncoder.encode(result);
System.out.println(sunEncoded);
分别解密
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(ss);
ArrayList<Byte> binary = new ArrayList<Byte>();
for (int i=0; i<dec.length; i++){
binary.add(dec[i]);
}
ArrayList<Byte> list =new ArrayList<>();
ArrayList<Byte> itogov =new ArrayList<>();
for(int i=0; i<binary.size(); i++){
if (i%64!=0){
list.add(binary.get(i));
}
else{
for(int l = 0; l > list.size()/2; l++) {
if (list.get(l) <= list.get(list.size()-1-l)) {
list.set(l, list.get(list.size()-1-l));
list.set(list.size()-1-l, list.get(l));
}
}
for (int q=0; q<list.size(); q++){
itogov.add(list.get(q));
}
list.clear();
}
}
while (itogov.get(itogov.size()-1)==itogov.get(itogov.size()-2)){
itogov.remove(itogov.size()-1);
}
itogov.remove(itogov.size()-1);
byte[] result = new byte[itogov.size()];
for(int i = 0; i < itogov.size(); i++) {
result[i] = itogov.get(i);
}
//System.out.println((byte) k.toString().length()/10);
String sunDecoder = new String(result, "UTF8");
System.out.println(sunDecoder);
我将不胜感激
解决方案
推荐阅读
- jsf - FacesContext 将参数发送到新页面而不使用 url 并使用 faces-redirect = true?
- java - 打开二级缓存时Hazelcast node.js客户端错误
- python - 在 Marshmallow,Python [PUT] 请求中将值更改为 null
- android - 权限是否相关?
- excel - 导出的 .bas 模块有一个属性是什么意思?
- db2 - 如何在集成总线中模拟错误 [IBM] [CLI Driver] [DB2/AIX64] SQL0911N?
- instagram - 有没有通过 API 获得 Instagram 亮点?
- sql - SQL Query: 选择一个查询加入 3 个带有 case 条件的表
- r - dplyr 中 group_by 和 select 的组合
- cassandra - Cassandra CQL - 将 system.local 表中的 release_version 列转换为 int