160 likes | 318 Views
JAVA Cryptography. AI &HC I LAB 김 성 현. A BigInteger. - 자바 1.1 은 java.math.BigInteger 를 도입 - 암호화 알고리즘 계산에 사용되는 Integer 와 단위 계산에 사용 - 계산 속도를 최적화 할 수 있는 클래스 제공. public BigInteger(int bitLength, int certainty, Random rnd) int keyLength = 2048; int certainty = 16;
E N D
JAVACryptography AI &HC I LAB 김 성 현
A BigInteger - 자바 1.1은 java.math.BigInteger를 도입 - 암호화 알고리즘 계산에 사용되는 Integer와 단위 계산에 사용 - 계산 속도를 최적화 할 수 있는 클래스 제공
public BigInteger(int bitLength, int certainty, Random rnd) int keyLength = 2048; int certainty = 16; SecureRandom sr = new SecureRandom(); BigInteger p = new BigInteger(keyLength, certainty, sr); public BigInteger(int numBits, Random rndSrc) BigInteger g = new BigInteger(keyLength-1, sr); BigInteger x = new BigInteger(keyLength-1, sr); BigInteger y = g.modPow(x, p); public BigInteger(byte[] val); public BigInteger(int signum, byte[] magnitude); BigInteger m = new BigInteger(1, messageBytes); public byte[] toByteArray();
protected byte[] getBytes(BigInteger big) { byte[] bigBytes = big.toByteArray(); if ((big.bitLength() % 8) !=0) { return bigBytes; } else { byte[] smallerBytes = new byte[big.bitLength() / 8]; system.arraycopy(bigBytes, 1, smallerBytes, 0, smallerBytes.length); return smallerBytes; } }
B Base64
base64 digits input bytes 6 5 4 3 2 1 6 5 4 3 2 1 6 5 4 3 2 1 6 5 4 3 2 1 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 3개 입력 byte를 4개의 base 64 digit로 표현
package oreilly.jonathan.util; public class Base64{ public static String encode(byte[] raw) { StringBuffer encoded = new StringBuffer(); for (int i = 0; i < raw.length; i += 3) { encoded.append(encodeBlock(raw, i)); } return encoded.toString(); } protected static char[] encodeBlock(byte[] raw, int offset) int block = 0; int slack = raw.length - offset -1; int end = (slack >= 2) ? 2 : slack; for (int i = 0; i <= end; i++) { byte b = raw[offset + I]; int neuter = (b < 0) ? b + 256 : b; block += neuter << (8 * (2 -i)); } char[] base64 = new char[4]; for (int i = 0; i < 4; i ++) { int sixbit = (block >>> (6 * (3 -i))) & 0x3f; base64[i] = getChar(sixbit); }
if (slack < 1) base64[2] = '='; if (slack <2) base64[3] = '='; return base64; } protected static char getChar(int sixBit) { if (sixBit >=0 && sixBit <= 25) return (char)('A' + sixBit); if (sixBit >=26 && sixBit <= 51) return (char)('a' + (sixBit-26)); if (sixBit >=52 && sixBit <= 61) return (char)('0' + (sixBit-52)); if (sixBit ==62) return '+'; if (sixBit ==63) return '/'; return '?'; }
public static byte[] decode(String base64) { int pad = 0; for (int i = base64.length() - 1; base64.charAt(i) == '='; I--) pad++; int length = base64.length() * 6 /8 - pad; byte[] raw = new byte[length]; int rawIndex = 0; for (int i = 0; i < base64.length(); I +=4) { int block = (getValue(base64.charAt(i)) <<18) + (getValue(base64.charAt(i + 1)) << 12) + (getValue(base64.charAt(i + 2)) << 6) + (getValue(base64.charAt(i + 3))); for (int j = 0; j < 3 && rawIndex + j <raw.length; j++) raw[rawIndex + j] = (byte) ((block >> (8 * (2 - j))) & 0xff); rawIntdex += 3; } retrun raw; }
Protected static int getValue(char c) { if (c >= 'A' && c <= 'Z') return c-'A'; if (c >= 'a && c <= 'z') return c-'a' + 26; if (c >= '0' && c <= '9') return c-'0' + 52; if (c == '+' return 62; if (c == '/' return 63; if (c == '=' return 0'; return -1; } }
C JAR - Java archive나 JAR 파일 생성 - JAR 파일을 생성하거나 수정에 사용
Creating C:dir Volume in drive C is BUENDIA Volume Serial Number is 1929-10EE Directory of C:\f1 jdk1.2beta2\demo\GraphLayout . <DIR> 04-16-97 8:28a . .. <DIR> 04-16-97 8:28a .. EDGE~1 CLA 316 09-18-96 12:16p Edge.class GRAPH~1 CLA 3,059 09-18-96 12:16p Graph.class GRAPH~1 JAV 9,503 09-18-96 10:14a Graph.java GRAPH~2 CLA 5,986 09-18-96 12:16p GraphPanel.class NODE~1 CLA 375 09-18-96 12:16p Node.class EXAMPL~1 HTM 415 09-18-96 12:16p example1.html EXAMPL~1 HTM 241 09-18-96 12:16p example2.html EXAMPL~1 HTM 619 09-18-96 12:16p example3.html EXAMPL~1 HTM 283 09-18-96 12:16p example4.html AUDIO <DIR> 04-16-97 8:28a audio 9 file(s) 20,797 bytes 3 dir(s) 222,429,184 bytes free
C:jar -cf GraphLayout.jar *.class audio C:jar -cvf GraphLayout.jar *.class audio adding: Edge.class (in=316) (out=241) (deflated 23%) adding: Graph.class (in=3059) (out=1762) (deflated 42%) adding: GraphPanel.class (in=5986) (out=3492) (deflated 41%) adding: Node.class (in=375) (out=275) (deflated 26%) adding: audio/ (in=0) (out=0) (stored 0%) adding: audio/computer.au (in=21745) (out=20105) (deflated 7%) adding: audio/drip.au (in=759) (out=764) (deflated 0%) adding: audio/gong.au (in=42068) (out=37645) (deflated 10%) -c : create -v: verbose
Extrating C:jar -tvf GraphLayout.jar 948 Tue Jun 03 15:29:48 EDT 1997 META-INF/MANIFEST.MF 316 Wed Sep 18 12:16:52 EDT 1996 Edge.class 3059 Wed Sep 18 12:16:52 EDT 1997 Graph.class 5986 Wed Sep 18 12:16:54 EDT 1997 GraphPanel.class 375 Wed Sep 18 12:16:54 EDT 1997 Node.class 0 Wed Apr 16 08:28:38 EDT 1997 audio/ 21745 Wed Sep 18 12:16:56 EDT 1997 audio/computer.au 759 Wed Sep 18 12:16:56 EDT 1997 audio/drip.au 42068 Wed Sep 18 12:16:56 EDT 1997 audio/gong.au C:jar -xvf GraphLayout.jar Edge.class audio extracted: Edge.class created: audio\par extracted: audio\f1 computer.au extracted: audio\f1 drip.au extracted: audio\f1 gong.au C:jar -xvf GraphLayout.jar audio/computer.au extracted: audio\f1 computer.au -t : To view the content of JAR file -x: To extract the content of JAR file To extract the specific files from a JAR file
Manifest Manifest-Version:1.0 Name: audio/computer.au Digest-Algorithms: SHA MD5 SHA-Digest: zJMcYmfFhSUPj8kdfZxKKJAXUM= MD5-Digest: 5OWrlZ4NgfWzsXuuiwxrHg== Java-Bean: True Name: Edge.class Java-Bean: True C:jar -cfm GraphLayout.jar add.mf *.class audio Name: Edge.class Java-Bean: True Digest-Algorithms: SHA MD5 SHA-Digest: sFKF74y7jL0DJQ2wuuxVgONMmEc= MD5-Digest: xRwh6TRKszKWp8qMEdiPzw==
Signing signature.file=MARISIGN C:jar -tvf signedArchive.jar META-INF 288 Fri May 30 09:09:00 EDT 1997 META-INF/MANIFEST.MF 289 Wed Jun 04 15:10:54 EDT 1997 META-INF/MANIFEST.SF 1289 Wed Jun 04 15:10:54 EDT 1997 META-INF/MANIFEST.DSA