@@ -69,8 +69,9 @@ public static String ccbXorMac(byte[] macStr, byte[] macKye) throws Exception{
69
69
byte [] tempBuf = new byte [8 ];
70
70
System .arraycopy (block .getBytes (),0 ,tempBuf ,0 ,8 );
71
71
byte mode = 0 ;
72
- if (macKye .length == 16 )
73
- mode = 2 ;
72
+ if (macKye .length == 16 ) {
73
+ mode = 2 ;
74
+ }
74
75
res = EncryptUtil .doEncrypt (mode , macKye , tempBuf , null );
75
76
76
77
/**将加密后的结果与后8 个字节异或*/
@@ -103,7 +104,7 @@ public static String ccbXorMac(byte[] macStr, byte[] macKye) throws Exception{
103
104
/// <param name="key">密钥</param>
104
105
/// <param name="data">数据</param>
105
106
/// <returns>16进制MAC值</returns>
106
- public static String StpMac (byte [] data , byte [] keyValue ) throws Exception {
107
+ public static String stpMac (byte [] data , byte [] keyValue ) throws Exception {
107
108
//把报文以8字节分组,最后一组不足8字节补0,
108
109
int datalen = data .length ;
109
110
datalen += (8 - datalen % 8 ) % 8 ; //不足8位不足8位
@@ -191,9 +192,9 @@ public static String eviXorMac(byte[] macStr, byte[] macKye) throws Exception{
191
192
/**将运算后的结果(ENC BLOCK2)转换成16 个HEXDECIMAL 取前16个字节作为MAC值*/
192
193
return HexUtil .bytesToHexStr (mes , 0 , 8 ).toUpperCase ();
193
194
}
194
-
195
+
195
196
/**
196
- *
197
+ *
197
198
* 兴业前置SM4MAC计算方法
198
199
* @author zhouzhou Email:[email protected]
199
200
* @date Aug 21, 2018
@@ -203,8 +204,7 @@ public static String eviXorMac(byte[] macStr, byte[] macKye) throws Exception{
203
204
* @return
204
205
*
205
206
*/
206
- public static byte [] posSM4Mac (byte [] keyValue , byte [] data )
207
- {
207
+ public static byte [] posSm4Mac (byte [] keyValue , byte [] data ){
208
208
//把报文以8字节分组,最后一组不足8字节补0,
209
209
//byte[] data = Encoding.Default.GetBytes(mac);
210
210
int datalen = data .length ;
@@ -230,27 +230,21 @@ public static byte[] posSM4Mac(byte[] keyValue, byte[] data)
230
230
{
231
231
for (int j = 0 ; j < 16 ; j ++)
232
232
{
233
- // DESEncrypt0(secdata[i * 8 + j], key1);
234
233
temp [j ] = secdata [i * 16 + j ];
235
234
temp [j ] ^= res [j ];
236
235
}
237
- //res = Encrypt(temp, key1);
238
- // res = SM4.EncriptB(temp, keyValue);
239
236
SM4 .GMSM4 (temp , temp .length , keyValue , res , SM4 .ENCRYPT );
240
- //res = convertHexStrToByteArray(Encrypt3Des(convertByteArrayToHexStr(res), key));
241
237
}
242
- //res = Decrypt(res, key2);
243
- //res = Encrypt(res, key1);
244
238
return HexUtil .bytesToHexStr (res , 0 , 4 ).toUpperCase ().getBytes ();
245
239
}
246
240
247
241
248
242
public static String SM4Mac (byte [] keyValue , byte [] data )
249
243
{
250
244
//把报文以8字节分组,最后一组不足8字节补0,
251
- //byte[] data = Encoding.Default.GetBytes(mac);
252
245
int datalen = data .length ;
253
- datalen += (16 - datalen % 16 ) % 16 ; //不足16位不足16位
246
+ //不足16位不足16位
247
+ datalen += (16 - datalen % 16 ) % 16 ;
254
248
byte [] secdata = new byte [datalen ];
255
249
System .arraycopy (data , 0 , secdata , 0 , data .length );
256
250
for (int i = data .length ; i < datalen ; i ++)
@@ -260,8 +254,6 @@ public static String SM4Mac(byte[] keyValue, byte[] data)
260
254
byte [] res = new byte [16 ];
261
255
byte [] temp = new byte [16 ];
262
256
263
- //yte[] key1 = new byte[8];
264
- //byte[] key2 = new byte[8];
265
257
266
258
//Array.Copy(keyValue, 0, key1, 0, key1.Length); //左部分
267
259
//Array.Copy(keyValue, 8, key2, 0, key1.Length); //右部分
@@ -276,13 +268,8 @@ public static String SM4Mac(byte[] keyValue, byte[] data)
276
268
temp [j ] = secdata [i * 16 + j ];
277
269
temp [j ] ^= res [j ];
278
270
}
279
- //res = Encrypt(temp, key1);
280
- // res = SM4.EncriptB(temp, keyValue);
281
271
SM4 .GMSM4 (temp , temp .length , keyValue , res , SM4 .ENCRYPT );
282
- //res = convertHexStrToByteArray(Encrypt3Des(convertByteArrayToHexStr(res), key));
283
272
}
284
- //res = Decrypt(res, key2);
285
- //res = Encrypt(res, key1);
286
273
return HexUtil .convertByteArrayToHexStr (res );
287
274
}
288
275
@@ -306,12 +293,14 @@ public static String DES3KKYEncrypt(byte[] key,byte[] pan,byte[] pin, int mode)
306
293
if (mode >= 2 ) {
307
294
LOG .info ("Pinblock:" + HexUtil .convertByteArrayToHexStr (Pinblock ));
308
295
}
309
-
310
- byte [] LK = new byte [8 ]; //可以分为LK(密钥的左边8字节),
296
+ //可以分为LK(密钥的左边8字节)
297
+ byte [] LK = new byte [8 ];
311
298
System .arraycopy (key , 0 , LK , 0 , 8 );
312
- byte [] CK = new byte [8 ]; //CK(密钥的中间8字节)
299
+ //CK(密钥的中间8字节)
300
+ byte [] CK = new byte [8 ];
313
301
System .arraycopy (key , 8 , CK , 0 , 8 );
314
- byte [] RK = new byte [8 ];//RK(密钥的左边8字节)
302
+ //RK(密钥的左边8字节)
303
+ byte [] RK = new byte [8 ];
315
304
System .arraycopy (key , 16 , RK , 0 , 8 );
316
305
/**
317
306
只是第一次计算,使用密钥LK;第二次计算,使用密钥CK;第三次计算,使用密钥LK。基本过程如下:
@@ -343,12 +332,12 @@ public static String DES3KKYEncrypt(byte[] key,byte[] pan,byte[] pin, int mode)
343
332
* @return
344
333
*
345
334
*/
346
- public static String StpSM4Mac (byte [] data ,byte [] keyValue )
335
+ public static String stpSm4Mac (byte [] data ,byte [] keyValue )
347
336
{
348
337
//把报文以8字节分组,最后一组不足8字节补0,
349
- //byte[] data = Encoding.Default.GetBytes(mac);
350
338
int datalen = data .length ;
351
- datalen += (16 - datalen % 16 ) % 16 ; //不足16位不足16位
339
+ //不足16位不足16位
340
+ datalen += (16 - datalen % 16 ) % 16 ;
352
341
byte [] secdata = new byte [datalen ];
353
342
System .arraycopy (data , 0 , secdata , 0 , data .length );
354
343
for (int i = data .length ; i < datalen ; i ++)
@@ -358,29 +347,18 @@ public static String StpSM4Mac(byte[] data,byte[] keyValue)
358
347
byte [] res = new byte [16 ];
359
348
byte [] temp = new byte [16 ];
360
349
361
- //yte[] key1 = new byte[8];
362
- //byte[] key2 = new byte[8];
363
-
364
- //Array.Copy(keyValue, 0, key1, 0, key1.Length); //左部分
365
- //Array.Copy(keyValue, 8, key2, 0, key1.Length); //右部分
366
350
367
351
/**按每8个字节做异或 **/
368
352
int arrayLen = datalen / 16 ;
369
353
for (int i = 0 ; i < arrayLen ; i ++)
370
354
{
371
355
for (int j = 0 ; j < 16 ; j ++)
372
356
{
373
- // DESEncrypt0(secdata[i * 8 + j], key1);
374
357
temp [j ] = secdata [i * 16 + j ];
375
358
temp [j ] ^= res [j ];
376
359
}
377
- //res = Encrypt(temp, key1);
378
- // res = SM4.EncriptB(temp, keyValue);
379
360
SM4 .GMSM4 (temp , temp .length , keyValue , res , SM4 .ENCRYPT );
380
- //res = convertHexStrToByteArray(Encrypt3Des(convertByteArrayToHexStr(res), key));
381
361
}
382
- //res = Decrypt(res, key2);
383
- //res = Encrypt(res, key1);
384
362
return HexUtil .bytesToHexStr (res , 0 , 8 ).toUpperCase ();
385
363
}
386
364
@@ -399,7 +377,6 @@ public static String StpSM4Mac(byte[] data,byte[] keyValue)
399
377
*/
400
378
public static byte [] encryptSM4Pass (byte [] key , String cardNo , String PIN ){
401
379
byte [] pinBlok = EncryptUtil .formatSM4Pinblock (cardNo .getBytes (), PIN .getBytes ());
402
- //LOG.info("SM4Pinblock:" + HexUtil.convertByteArrayToHexStr(pinBlok));
403
380
byte [] out = new byte [16 ];
404
381
SM4 .GMSM4 (pinBlok , pinBlok .length , key , out , SM4 .ENCRYPT );
405
382
return out ;
@@ -441,7 +418,6 @@ public static String WekDecryptPass(byte[] key, String cardNo, String PIN) throw
441
418
LOG .info ("Pinblock:" + HexUtil .convertByteArrayToHexStr (pinBlok ));
442
419
//2.加密
443
420
byte [] pinm = EncryptUtil .doEncrypt (EncryptConst .DECRY_3DES_CBC , key , pinBlok , null );
444
-
445
421
//3.转换16进制
446
422
return HexUtil .convertByteArrayToHexStr (pinm );
447
423
}
@@ -455,9 +431,9 @@ public static String WekDecryptPass(byte[] key, String cardNo, String PIN) throw
455
431
* @throws Exception
456
432
*/
457
433
public static String DesDecode (String str ,String key ) throws Exception {
458
- //
459
434
int datalen = key .getBytes ().length ;
460
- datalen += (16 - datalen % 16 ) % 16 ; //不足16位不足16位
435
+ //不足16位不足16位
436
+ datalen += (16 - datalen % 16 ) % 16 ;
461
437
byte [] secdata = new byte [datalen ];
462
438
System .arraycopy (key .getBytes (), 0 , secdata , 0 , key .getBytes ().length );
463
439
for (int i = key .getBytes ().length ; i < datalen ; i ++)
@@ -494,9 +470,9 @@ public static String DesDecode(String str,String key) throws Exception{
494
470
* @throws Exception
495
471
*/
496
472
public static String SM4Decode (String str ,String key ) throws Exception {
497
- //
498
473
int datalen = key .getBytes ().length ;
499
- datalen += (16 - datalen % 16 ) % 16 ; //不足16位不足16位
474
+ //不足16位不足16位
475
+ datalen += (16 - datalen % 16 ) % 16 ;
500
476
byte [] secdata = new byte [datalen ];
501
477
System .arraycopy (key .getBytes (), 0 , secdata , 0 , key .getBytes ().length );
502
478
for (int i = key .getBytes ().length ; i < datalen ; i ++)
0 commit comments