关于#android#的问题,请各位专家解答!

img


谁会解密这个文件,不会解密,特地来到这个资源网问一下大家,会解密的私我,有额外报酬,谢谢!

用的哪种加密方式啊

试试使用 CocosBuilder 或者使用一个叫做 CCBReader 的库来解析这种文件,而且哈需要使用密码或密钥。如果你没有密码或密钥,那没得

.ccbi文件是CCB项目发布后的生成的二进制文件。CCBReader可以快速通过该二进制文件,读取并设置CCB项目内容到引擎中
.ccbi文件是.ccb文件的精简,专门提供给CCBReader类进行解析。通过CCBReader,把项目中的Node和Node属性在引擎中新建Node并设置属性,从而把这些Node添加到Scene或Layer中。
参考实例解析boby109983.body.ccbi文件,链接:https://www.cnblogs.com/deepcho/p/cocosbuilder-ccbreader-read-node-graph.html

解密方法有很多诶

不知道加密方式,这个很麻烦
加密一般两种对称加密和非对称加密
对称加密 是密码一样
非对称加密是公私钥
根据加密方式每种又有不同的加密算法
很难在不知道情况下去做一些解密
但是看这个命名似乎是cocos builder 的数据,题主可以试一下

这玩意很麻烦吧,需要一点点去根据私钥去解密,可以根据文件名去搜索一下看看有没有什么线索

ccbi,这应该是CocosBuilder输出的二进制文件

如果想解密 .ccbi 文件,可以使用 CocosBuilder 软件来打开文件。CocosBuilder 是一个图形化界面设计工具,可以用来创建游戏引擎中的 GUI。

如果想在代码中解密 .ccbi 文件,可以使用 CCBReader 类来解析文件。CCBReader 是一个类,它可以通过 .ccbi 文件读取并设置 CCB 项目内容到引擎中。下面是一个示例代码,展示了如何使用 CCBReader 类来解析 .ccbi 文件:

CCBReader* reader = new CCBReader(nodeLoaderLibrary);
Node* node = reader->readNodeGraphFromFile("MyCCBFile.ccbi");

这个代码会创建一个新的 CCBReader 对象,并使用 readNodeGraphFromFile 方法来解析 .ccbi 文件。解析后的内容将被保存在 Node 对象中。
仅供参考,望采纳,谢谢。

CCBI文件是CocosBuilder创建的二进制文件,可以用来存储场景或节点图的图形数据。这些文件通常是用来在Cocos2d游戏引擎中使用的,并且可以在其他平台上使用Cocos2d来打开和查看这些文件。

如果你想查看CCBI文件的内容,你可以使用CocosBuilder或其他专业的图形编辑器来打开它们。你还可以尝试使用文本编辑器打开它们,但这通常不会很有用,因为CCBI文件是二进制格式,并且不是文本格式。

如果你想要编辑CCBI文件,你可以使用CocosBuilder或其他专业的图形编辑器来打开它们并进行编辑。你也可以使用转换工具将CCBI文件转换为其他格式,然后使用其他工具编辑它们,例如将CCBI文件转换为可编辑的XML文件。

文件加解密的流程及原理
1、加密方法:存储文件时,从输入流中截取文件的字节数组,对字节数组进行加密,至于加密的方式和算法就可以视需求而定了,然后把加密后的字节数组写入到文件中,最后生成加密后的文件;
2、解密方法:同加密方法一样,只不过是对字节数据进行解密,最后生成明文文件;
3、加密算法:Android系统本身引入了javax包的Cipher类,这个类里提供了各种各样的通用的加密方式,如AES对称加密等;该程序中有个CipherUtil工具类,里面有一些简单的使用Cipher进行AES加解密的方法;当然最好还是好好学习一下Cipher类的使用;
4、注意事项:

如何判断一个文件是加密后的文件,最简单的方法就是对加密后的文件统一增加一个后缀名,然后在解密之后将这个后缀名去除,还原回原有文件格式;如:密文文件的统一后缀名为“.cipher”,明文文件名为"测试.txt",加密后的密文文件应该为“测试.txt.cipher”;
加密文件时还有一个重要的注意事项,就是加密后的密文和明文的长度是否相同,如果文件时一次读取出所有字节数组进行加密的话不用担心这个问题,但是当对文件分次读取加密或分段加密的话,就不得不考虑这个问题了,最方便的方法就是保证明文和加密后的密文长度相同;如果长度不同,由于是分段加密的,密文是由一段一段子密文拼接成的,解密时会找不到每段子密文,因为不知道每段子密文的长度是多少;
主要代码:

/**自定义实现简单的文件加密解密工具 
 * Created by zhangshuo on 2016/6/28. 
 */ 
public class CustomFileCipherUtil { 
 
  /** 
   * 加密后的文件的后缀 
   */ 
  public static final String CIPHER_TEXT_SUFFIX = ".cipher"; 
 
  /** 
   * 加解密时以32K个字节为单位进行加解密计算 
   */ 
  private static final int CIPHER_BUFFER_LENGHT = 32 * 1024; 
 
  /** 
   * 加密,这里主要是演示加密的原理,没有用什么实际的加密算法 
   * 
   * @param filePath 明文文件绝对路径 
   * @return 
   */ 
  public static boolean encrypt(String filePath, CipherListener listener) { 
    try { 
      long startTime = System.currentTimeMillis(); 
      File f = new File(filePath); 
      RandomAccessFile raf = new RandomAccessFile(f, "rw"); 
      long totalLenght = raf.length(); 
      FileChannel channel = raf.getChannel(); 
 
      long multiples = totalLenght / CIPHER_BUFFER_LENGHT; 
      long remainder = totalLenght % CIPHER_BUFFER_LENGHT; 
 
      MappedByteBuffer buffer = null; 
      byte tmp; 
      byte rawByte; 
 
      //先对整除部分加密 
      for(int i = 0; i < multiples; i++){ 
        buffer = channel.map( 
            FileChannel.MapMode.READ_WRITE, i * CIPHER_BUFFER_LENGHT, (i + 1) * CIPHER_BUFFER_LENGHT); 
 
        //此处的加密方法很简单,只是简单的异或计算 
        for (int j = 0; j < CIPHER_BUFFER_LENGHT; ++j) { 
          rawByte = buffer.get(j); 
          tmp = (byte) (rawByte ^ j); 
          buffer.put(j, tmp); 
 
          if(null != listener){ 
            listener.onProgress(i * CIPHER_BUFFER_LENGHT + j, totalLenght); 
          } 
        } 
        buffer.force(); 
        buffer.clear(); 
      } 
 
      //对余数部分加密 
      buffer = channel.map( 
          FileChannel.MapMode.READ_WRITE, multiples * CIPHER_BUFFER_LENGHT, multiples * CIPHER_BUFFER_LENGHT + remainder); 
 
      for (int j = 0; j < remainder; ++j) { 
        rawByte = buffer.get(j); 
        tmp = (byte) (rawByte ^ j); 
        buffer.put(j, tmp); 
 
        if(null != listener){ 
          listener.onProgress(multiples * CIPHER_BUFFER_LENGHT + j, totalLenght); 
        } 
      } 
      buffer.force(); 
      buffer.clear(); 
 
      channel.close(); 
      raf.close(); 
 
      //对加密后的文件重命名,增加.cipher后缀 
//      f.renameTo(new File(f.getPath() + CIPHER_TEXT_SUFFIX)); 
      Log.d("加密用时:", (System.currentTimeMillis() - startTime) /1000 + "s"); 
      return true; 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
    } 
  } 
 
 
  /** 
   * 解密,这里主要是演示加密的原理,没有用什么实际的加密算法 
   * 
   * @param filePath 密文文件绝对路径,文件需要以.cipher结尾才会认为其实可解密密文 
   * @return 
   */ 
  public static boolean decrypt(String filePath, CipherListener listener) { 
    try { 
      long startTime = System.currentTimeMillis(); 
      File f = new File(filePath); 
//      if(!f.getPath().toLowerCase().endsWith(CIPHER_TEXT_SUFFIX)){ 
//        //后缀不同,认为是不可解密的密文 
//        return false; 
//      } 
 
      RandomAccessFile raf = new RandomAccessFile(f, "rw"); 
      long totalLenght = raf.length(); 
      FileChannel channel = raf.getChannel(); 
 
      long multiples = totalLenght / CIPHER_BUFFER_LENGHT; 
      long remainder = totalLenght % CIPHER_BUFFER_LENGHT; 
 
      MappedByteBuffer buffer = null; 
      byte tmp; 
      byte rawByte; 
 
      //先对整除部分解密 
      for(int i = 0; i < multiples; i++){ 
        buffer = channel.map( 
            FileChannel.MapMode.READ_WRITE, i * CIPHER_BUFFER_LENGHT, (i + 1) * CIPHER_BUFFER_LENGHT); 
 
        //此处的解密方法很简单,只是简单的异或计算 
        for (int j = 0; j < CIPHER_BUFFER_LENGHT; ++j) { 
          rawByte = buffer.get(j); 
          tmp = (byte) (rawByte ^ j); 
          buffer.put(j, tmp); 
 
          if(null != listener){ 
            listener.onProgress(i * CIPHER_BUFFER_LENGHT + j, totalLenght); 
          } 
        } 
        buffer.force(); 
        buffer.clear(); 
      } 
 
      //对余数部分解密 
      buffer = channel.map( 
          FileChannel.MapMode.READ_WRITE, multiples * CIPHER_BUFFER_LENGHT, multiples * CIPHER_BUFFER_LENGHT + remainder); 
 
      for (int j = 0; j < remainder; ++j) { 
        rawByte = buffer.get(j); 
        tmp = (byte) (rawByte ^ j); 
        buffer.put(j, tmp); 
 
        if(null != listener){ 
          listener.onProgress(multiples * CIPHER_BUFFER_LENGHT + j, totalLenght); 
        } 
      } 
      buffer.force(); 
      buffer.clear(); 
 
      channel.close(); 
      raf.close(); 
 
      //对加密后的文件重命名,增加.cipher后缀 
//      f.renameTo(new File(f.getPath().substring(f.getPath().toLowerCase().indexOf(CIPHER_TEXT_SUFFIX)))); 
 
      Log.d("解密用时:", (System.currentTimeMillis() - startTime) / 1000 + "s"); 
      return true; 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
    } 
  } 
 
  /** 
   * 用于加解密进度的监听器 
   */ 
  public interface CipherListener{ 
    void onProgress(long current, long total); 
  } 
} 

参考一下https://blog.csdn.net/weixin_39835607/article/details/111808048