!92 保存接口请求加密:Base64+ROT13

Merge pull request !92 from toss/ROT13-encrypt
This commit is contained in:
小东
2025-05-25 02:38:50 +00:00
committed by Gitee
2 changed files with 89 additions and 1 deletions

View File

@@ -12,8 +12,10 @@ import org.ssssssss.magicapi.core.service.MagicDynamicRegistry;
import org.ssssssss.magicapi.core.service.MagicResourceService;
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;
import org.ssssssss.magicapi.utils.IoUtils;
import org.ssssssss.magicapi.utils.ROT13Utils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Function;
@@ -72,12 +74,14 @@ public class MagicResourceController extends MagicController implements MagicExc
@ResponseBody
public JsonBean<String> saveFile(@PathVariable("folder") String folder, String auto, MagicHttpServletRequest request) throws IOException {
byte[] bytes = IoUtils.bytes(request.getInputStream());
String encrypt = new String(bytes, StandardCharsets.UTF_8);
String decrypt = ROT13Utils.decrypt(encrypt);
MagicEntity entity = configuration.getMagicDynamicRegistries().stream()
.map(MagicDynamicRegistry::getMagicResourceStorage)
.filter(it -> Objects.equals(it.folder(), folder))
.findFirst()
.orElseThrow(() -> new InvalidArgumentException(GROUP_NOT_FOUND))
.read(bytes);
.read(decrypt.getBytes(StandardCharsets.UTF_8));
isTrue(allowVisit(request, Authorization.SAVE, entity), PERMISSION_INVALID);
// 自动保存的代码,和旧版代码对比,如果一致,则不保存,直接返回。
if (entity ==null){

View File

@@ -0,0 +1,84 @@
package org.ssssssss.magicapi.utils;
import java.util.Base64;
public class ROT13Utils {
/**
* ROT13 函数:对给定字符串执行 ROT13 编码。
* @param str - 要编码的字符串。
* @return 编码后的字符串。
*/
public static String rot13(String str) {
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= 'a' && c <= 'z') {
// 小写字母处理
c = (char) (((c - 'a' + 13) % 26) + 'a');
} else if (c >= 'A' && c <= 'Z') {
// 大写字母处理
c = (char) (((c - 'A' + 13) % 26) + 'A');
}
// 非字母字符保持不变
result.append(c);
}
return result.toString();
}
/**
* 加密流程:
* 数据 -> Base64 编码 -> ROT13 替换
* @param str 要加密的字符串。
* @return 加密后的字符串。
*/
public static String encrypt(String str) {
try {
String encode = encode(str);
return rot13(encode);
} catch (Exception e) {
return str;
}
}
/**
* 解密流程:
* ROT13 -> Base64 -> 数据对象
* @param encrypted 要解密的字符串
* @return 解密后的字符串
*/
public static String decrypt(String encrypted) {
try {
String encrypt = rot13(encrypted.replaceFirst("^\"", "").replaceAll("\"$", ""));
return decode(encrypt);
} catch (Exception e) {
return encrypted;
}
}
/**
* 对输入字符串进行 Base64 编码
*
* @param input 输入字符串
* @return 编码后的字符串
*/
public static String encode(String input) {
// 将字符串转换为字节数组
byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes());
// 转换回字符串并返回
return new String(encodedBytes);
}
/**
* 对 Base64 编码的字符串进行解码
*
* @param encodedString 已编码的字符串
* @return 解码后的原始字符串
*/
public static String decode(String encodedString) {
// 将字符串转换为字节数组
byte[] decodedBytes = Base64.getDecoder().decode(encodedString.getBytes());
// 转换回字符串并返回
return new String(decodedBytes);
}
}