BouncyCastle lib. Codenameone kullanarak bir ISO-0 pinblock şifrelemeye çalışıyorum.Veri bloğu boyutu codenameone içinde hizalanmış değil BouncyCastle (Dolgu Yok)
public static StringBuilder pad(String data, char padCharacter, int multiplier) {
StringBuilder text = new StringBuilder();
text.append(data);
while (text.length() % multiplier != 0) {
text.append(padCharacter);
}
return text;
}
örneğin ölçüm sonuçları elde etmek için:
private static byte[] performEncrypt(byte[] key, String plainText, boolean padding) {
byte[] ptBytes = plainText.getBytes();
BufferedBlockCipher cipher;
if (padding) {
cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new DESedeEngine()));
} else {
cipher = new BufferedBlockCipher(new CBCBlockCipher(new DESedeEngine()));
}
cipher.init(true, new KeyParameter(key));
byte[] rv = new byte[cipher.getOutputSize(ptBytes.length)];
int oLen = cipher.processBytes(ptBytes, 0, ptBytes.length, rv, 0);
try {
cipher.doFinal(rv, oLen);
} catch (CryptoException ce) {
LoggingUtil.error(TAG, ce, "Unexpected Exception");
}
return rv;
}
private static String createIso0PinBlock(String pin, String number) {
...
}
private static String getPaddedData(String data, byte padCharacter) {
String paddedData = ByteUtil.pad(data, (char) padCharacter, 8).toString();
return paddedData;
}
public static String createPinBlockAndEncrypt(String pin, String number) {
LoggingUtil.debug("SecurityUtil", "CREAT PIN BLOCK AND ENCRYPT.. PIN: " + pin + " NUMBER: " + number);
String pb = createIso0PinBlock(pin, number.substring(0, number.length() - 1));
LoggingUtil.debug("SecurityUtil", "PINBLOCK: " + pb);
String padded = getPaddedData(pb, (byte) 0x00);
LoggingUtil.debug("SecurityUtil", "PADDED: " + padded);
byte[] encrypted = performEncrypt(Hex.decode(KEY.getBytes()), new String(ByteUtil.hex2byte(padded)), false);
return ByteUtil.byte2hex(encrypted);
}
ByteUtil
olarak aşağıdaki gibidir: bu ulaşmak için kullanımı yöntem olup
[SecurityUtil] CREAT PIN BLOCK AND ENCRYPT.. PIN: 2255 NUMBER: 6284734104205417486
[SecurityUtil] PINBLOCK: 042214FBDFABE8B7
[SecurityUtil] PADDED: 042214FBDFABE8B7
bir public static void main
yöntemi ile bu çalıştırın Ancak, bu Android için Codenameone aracılığıyla inşa ettiğimde, beklendiği gibi çalışıyor, ben logcat aşağıdaki hata olsun:
Yastıklı pinbobun uzunluğu 16 olmasına rağmen (8'in katları).
Bu konuyla ilgili herhangi bir yardım memnuniyetle karşılanacaktır.
Harika cevap. Codename One'da Strings'i yerel Dizeleriyle eşleştirirken, Strings'i kullanmak için kullanmaktan kaçınıyorum. iOS'ta ve bazı aşırı uç durumlarda hafif davranışsal tutarsızlıklar olabilir. Örneğin. https://www.codenameone.com/blog/zip-and-toast.html zip desteğini entegre ederken bir sorun yaşadık –