You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
9.2 KiB

2 years ago
// GS-EDS加解密接口包,注意:不可修改包名!
package com.hzdatalink.gsdes;
import com.fr.log.FineLoggerFactory;
public class FileOperation {
// DEMO命令行程序入口
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("请在命令行传入测试目标文件路径.");
return;
}
// 测试文件
String fileName = args[0];
System.out.println(String.format("开始测试文件加解密: %s.", fileName));
testFileEncDec(fileName);
testFileInfo(fileName);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
// 文件加密
public static Result encodeFile(String srcFileName, // 源文件名
String dstFileName // 目标文件名
) {
return jniEncodeFile(srcFileName, dstFileName);
}
// 文件解密
public static Result decodeFile(String srcFileName, // 源文件名
String dstFileName // 目标文件名
) {
return jniDecodeFile(srcFileName, dstFileName);
}
// 判断文件是否加密函数声明
public static IsFileEncryptedResult isFileEncrypted(String fileName // 文件名
) {
return jniIsFileEncrypted(fileName);
}
// 获取文件信息函数声明
public static GetFileInfoResult getFileInfo(String fileName // 文件名
) {
return jniGetFileInfo(fileName);
}
// 获取标密文件信息
public static GetFileCLIInfoResult getFileCLIInfo(String fileName // 文件名
) {
return jniGetFileCLIInfo(fileName);
}
// 设置加密文件信息
public static Result setFileInfo(String fileName, // 文件名
int userOID, // 文件所属用户OID
int orgOID, // 文件所属组织ID
int clID, // 文件密级
int fileId // 文件ID
) {
return jniSetFileInfo(fileName, userOID, orgOID, clID, fileId);
}
// 设置标密文件信息
public static Result setFileCLIInfo(String fileName, // 文件名
int userOID, // 文件所属用户OID
int orgOID, // 文件所属组织ID
int clID, // 文件密级
int fileId, // 文件ID
int sp, // 文件保密期限
int cliTime, // 文件标密时间
String fileUUID // 文件UUID
) {
return jniSetFileCLIInfo(fileName, userOID, orgOID, clID, fileId, sp, cliTime, fileUUID);
}
////////////////////////////////////////////////////////////////////
// 加载libGsDes.so
static {
String os = System.getProperty("os.name");
//Windows操作系统
if (os != null && os.toLowerCase().startsWith("windows")) {
FineLoggerFactory.getLogger().info("current system is win");
System.loadLibrary("gsedsapi");
} else if (os != null && os.toLowerCase().startsWith("linux")) {
FineLoggerFactory.getLogger().info("current system is linux");
System.loadLibrary("GsDes");
} else { //其它操作系统
FineLoggerFactory.getLogger().info("not support system");
}
}
// 文件加密函数声明
public static native Result jniEncodeFile(String srcFileName, // 源文件名
String dstFileName // 目标文件名
);
// 文件解密函数声明
public static native Result jniDecodeFile(String srcFileName, // 源文件名
String dstFileName // 目标文件名
);
// 判断文件是否加密函数声明
public static native IsFileEncryptedResult jniIsFileEncrypted(String fileName // 文件名
);
// 获取文件信息函数声明
public static native GetFileInfoResult jniGetFileInfo(String fileName // 文件名
);
// 获取标密文件信息
public static native GetFileCLIInfoResult jniGetFileCLIInfo(String fileName // 文件名
);
// 设置加密文件信息
public static native Result jniSetFileInfo(String fileName, // 文件名
int userOID, // 文件所属用户OID
int orgOID, // 文件所属组织ID
int clID, // 文件密级
int fileId // 文件ID
);
// 设置标密文件信息
public static native Result jniSetFileCLIInfo(String fileName, // 文件名
int userOID, // 文件所属用户OID
int orgOID, // 文件所属组织ID
int clID, // 文件密级
int fileId, // 文件ID
int sp, // 文件保密期限
int cliTime, // 文件标密时间
String fileUUID // 文件UUID
);
private static void testFileEncDec(String fileName) {
Result result;
// 解密文件
result = decodeFile(fileName, fileName);
if (result.getSucceeded()) {
System.out.println("解密文件成功.");
} else {
System.out.println(String.format("解密文件失败, %s", result.getMessage()));
}
// 加密文件
result = encodeFile(fileName, fileName);
if (result.getSucceeded()) {
System.out.println("加密文件成功.");
} else {
System.out.println(String.format("加密文件失败, %s", result.getMessage()));
return;
}
// 校验文件是否加密
IsFileEncryptedResult isEnc = isFileEncrypted(fileName);
if (isEnc.getSucceeded()) {
System.out.println(String.format("检查文件是否加密成功, 文件%s.", (isEnc.getEncrypted() ? "已加密" : "未加密")));
} else {
System.out.println(String.format("检查文件是否加密失败, %s", isEnc.getMessage()));
return;
}
// 解密文件
result = decodeFile(fileName, fileName);
if (result.getSucceeded()) {
System.out.println("解密文件成功.");
} else {
System.out.println(String.format("解密文件失败, %s", result.getMessage()));
}
}
private static void testFileInfo(String fileName) {
// 加密文件
Result result = encodeFile(fileName, fileName);
if (result.getSucceeded()) {
System.out.println("加密文件成功.");
} else {
System.out.println(String.format("加密文件失败, %s", result.getMessage()));
return;
}
// 设置文件信息
result = setFileInfo(fileName, 1026, 6, 5, 0);
if (result.getSucceeded()) {
System.out.println("设置文件信息成功.");
} else {
System.out.println(String.format("设置文件信息失败, %s", result.getMessage()));
}
// 获取文件信息
GetFileInfoResult fileInfo = getFileInfo(fileName);
if (fileInfo.getSucceeded()) {
System.out.println(String.format("获取文件信息成功, 文件%s, User:%d, Org:%d, cl:%d, fileid:%d.",
(fileInfo.getEncrypted() ? "已加密" : "未加密"), fileInfo.getUserOID(), fileInfo.getOrgOID(),
fileInfo.getCLID(), fileInfo.getFileID()));
} else {
System.out.println(String.format("获取文件信息失败, %s", fileInfo.getMessage()));
}
// 获取标密文件信息
GetFileCLIInfoResult fileCliInfo = getFileCLIInfo(fileName);
if (fileCliInfo.getSucceeded()) {
System.out.println(String.format(
"获取标密文件信息成功, 文件%s, User:%d, Org:%d, cl:%d, sp:%d, cliTime:%d, fileUuid:%s.",
(fileCliInfo.getEncrypted() ? "已加密" : "未加密"), fileCliInfo.getUserOID(), fileCliInfo.getOrgOID(),
fileCliInfo.getCLID(), fileCliInfo.getSP(), fileCliInfo.getCLITime(), fileCliInfo.getFileUUID()));
} else {
System.out.println(String.format("获取标密文件信息失败, %s", fileCliInfo.getMessage()));
}
// 设置标密文件信息
result = setFileCLIInfo(fileName, // 文件名
fileCliInfo.getUserOID(), fileCliInfo.getOrgOID(), fileCliInfo.getCLID(), fileCliInfo.getFileId(),
fileCliInfo.getSP(), fileCliInfo.getCLITime(), fileCliInfo.getFileUUID());
if (result.getSucceeded()) {
System.out.println("设置文件信息成功.");
} else {
System.out.println(String.format("设置文件信息失败, %s", result.getMessage()));
}
}
}