位置加密applet基本实现,目录下包含c java参考代码、打包工具、说明文档、 #2

Merged
zcy merged 20 commits from zcy_dev_cap into main 2025-09-09 02:39:35 +00:00
745 changed files with 21020 additions and 2214 deletions
Showing only changes of commit 2f79d18966 - Show all commits

View File

@@ -25,10 +25,16 @@ public final class Method {
};
// IV
private static final byte[] IV25 = {//todo 23 -> 25
// private static final byte[] IV23 = {
// (byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,(byte)0x37,
// (byte)0x38,(byte)0x39,(byte)0x61,(byte)0x62,(byte)0x63,(byte)0x64,(byte)0x65,(byte)0x66,
// (byte)0x67,(byte)0xC3,(byte)0x1C,(byte)0xB3,(byte)0xD3,(byte)0x5D,(byte)0xB7
// };
private static final byte[] IV25 = {
(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,(byte)0x37,
(byte)0x38,(byte)0x39,(byte)0x61,(byte)0x62,(byte)0x63,(byte)0x64,(byte)0x65,(byte)0x66,
(byte)0x67,(byte)0xC3,(byte)0x1C,(byte)0xB3,(byte)0xD3,(byte)0x5D,(byte)0xB7
(byte)0x67,(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,
(byte)0x37
};
// Input: 明文38字节
@@ -87,7 +93,8 @@ public final class Method {
short[] L2_t;
short[] L2_acc;
byte[] extract_iv_src;
byte[] extract_iv_last8;
byte[] extracted_iv_23;
short[] add64_tmp;
@@ -152,6 +159,9 @@ public final class Method {
public Method() {
// 算法内部使用23Byte IV
extracted_iv_23 = JCSystem.makeTransientByteArray((short)23, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
ctx_buf = JCSystem.makeTransientByteArray((short)4, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
LFSR_hi = JCSystem.makeTransientShortArray((short)16, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
LFSR_lo = JCSystem.makeTransientShortArray((short)16, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
@@ -175,7 +185,7 @@ public final class Method {
L2_t = JCSystem.makeTransientShortArray((short)2, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
L2_acc = JCSystem.makeTransientShortArray((short)2, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
extract_iv_src = JCSystem.makeTransientByteArray((short)8, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
extract_iv_last8 = JCSystem.makeTransientByteArray((short)8, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
add64_tmp = JCSystem.makeTransientShortArray((short)2, JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
@@ -660,15 +670,15 @@ public final class Method {
// 处理剩余8字节
for (short i = 0; i < 8; i++) {
extract_iv_src[i] = (byte) (input25Byte[(short)(17 + i)] & 0x3F);
extract_iv_last8[i] = (byte) (input25Byte[(short)(17 + i)] & 0x3F);
}
output23Byte[17] = (byte) ((extract_iv_src[0] << 2) | (extract_iv_src[1] >>> 4));
output23Byte[18] = (byte) (((extract_iv_src[1] & 0x0F) << 4) | (extract_iv_src[2] >>> 2));
output23Byte[19] = (byte) (((extract_iv_src[2] & 0x03) << 6) | extract_iv_src[3]);
output23Byte[20] = (byte) ((extract_iv_src[4] << 2) | (extract_iv_src[5] >>> 4));
output23Byte[21] = (byte) (((extract_iv_src[5] & 0x0F) << 4) | (extract_iv_src[6] >>> 2));
output23Byte[22] = (byte) (((extract_iv_src[6] & 0x03) << 6) | extract_iv_src[7]);
output23Byte[17] = (byte) ((extract_iv_last8[0] << 2) | (extract_iv_last8[1] >>> 4));
output23Byte[18] = (byte) (((extract_iv_last8[1] & 0x0F) << 4) | (extract_iv_last8[2] >>> 2));
output23Byte[19] = (byte) (((extract_iv_last8[2] & 0x03) << 6) | extract_iv_last8[3]);
output23Byte[20] = (byte) ((extract_iv_last8[4] << 2) | (extract_iv_last8[5] >>> 4));
output23Byte[21] = (byte) (((extract_iv_last8[5] & 0x0F) << 4) | (extract_iv_last8[6] >>> 2));
output23Byte[22] = (byte) (((extract_iv_last8[6] & 0x03) << 6) | extract_iv_last8[7]);
}
/**
@@ -1403,13 +1413,14 @@ public final class Method {
//===zuc256Encryptctx
// 初始化加密上下文
public void initZuc256EncryptCtx(byte[] key32, byte[] iv) {
public void initZuc256EncryptCtx(byte[] key32, byte[] iv_in_25) {
extractIv(iv_in_25, extracted_iv_23);
// Arrays.fill(this.buf, (byte) 0);
for (short i = 0; i < (short)this.ctx_buf.length; i++) {
this.ctx_buf[i] = (byte)0;
}
this.ctx_buflen = 0;
initState(key32, iv);
initState(key32, extracted_iv_23);
}
// 分阶段处理加密数据