Javaを使用したRSA署名(SHA256withRSA)の付与と検証

RSA署名を使う

RSAを使った書名の付与と検証のプロセスをJavaで実現するための手順です。
一通りのやり方をまとめた資料がなかったので、ここに書いておきます。

何か、応用方法はありそうで面白いですね。

		KeyPairGenerator generator;

		try {
			generator = KeyPairGenerator.getInstance("RSA");
			generator.initialize(2048);

			KeyPair       keyPair    = generator.generateKeyPair();
			RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
			RSAPublicKey  publicKey  = (RSAPublicKey)keyPair.getPublic();

			// Modulusを表示 (公開鍵と秘密鍵の両方に入っている)
			byte[] modulusBytes  = publicKey.getModulus().toByteArray();
			byte[] modulusBase64 = Base64.encodeBase64Chunked(modulusBytes);
			System.out.println("[modulus]");
			System.out.println(new String(modulusBase64));

			// 公開鍵を表示
			byte[] publicKeyBytes  = publicKey.getPublicExponent().toByteArray();
			byte[] publicKeyBase64 = Base64.encodeBase64Chunked(publicKeyBytes);
			System.out.println("[public]");
			System.out.println(new String(publicKeyBase64));

			// 秘密鍵を表示
			privateKey.ge

			byte[] privateKeyBytes  = privateKey.getPrivateExponent().toByteArray();
			byte[] privateKeyBase64 = Base64.encodeBase64Chunked(privateKeyBytes);
			System.out.println("[private]");
			System.out.println(new String(privateKeyBase64));

			// 署名対象データ
			String message = "TESTDATA";

			// 署名(秘密鍵)
			Signature signer = Signature.getInstance("SHA256withRSA");
			signer.initSign(privateKey);
			signer.update(message.getBytes("UTF-8"));
			byte[] sign = signer.sign();
			byte[] signBase64 = Base64.encodeBase64Chunked(sign);
			System.out.println("[sign]");
			System.out.println(new String(signBase64));

			// 検証(公開鍵)
			Signature verifier = Signature.getInstance("SHA256withRSA");
			verifier.initVerify(publicKey);
			verifier.update(message.getBytes("UTF-8"));
			boolean result = verifier.verify(sign);
			System.out.println("verify=" + result);

		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (SignatureException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

 

システム開発

Posted by @erestage