Android examples for java.security:RSA
RSA decrypt string with charset
/*/*from w w w.j a va 2 s . c o m*/ * Copyright (C) 2014 Wei Chou (weichou2010@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //package com.java2s; import android.util.Base64; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; public class Main { private static final String RSA_ARITHEMTIC_NAME = "RSA"; private static final String RSA_TRANSFORMATION = "RSA/ECB/PKCS1Padding"; public static String decrypt(boolean isByPublic, String base64Key, String ciphertext, String charset) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { Cipher cipher = Cipher.getInstance(RSA_TRANSFORMATION); cipher.init(Cipher.DECRYPT_MODE, isByPublic ? getPublicKey(RSA_ARITHEMTIC_NAME, base64Key) : getPrivateKey(RSA_ARITHEMTIC_NAME, base64Key)); byte[] output = cipher.doFinal(Base64.decode(ciphertext, Base64.DEFAULT)); return new String(output, charset); } private static PublicKey getPublicKey(String arithmetic, String base64EncodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException { byte[] keyBytes = Base64.decode(base64EncodedKey, Base64.DEFAULT); X509EncodedKeySpec x509 = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(arithmetic); return keyFactory.generatePublic(x509); } private static PrivateKey getPrivateKey(String arithmetic, String base64EncodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException { byte[] keyBytes = Base64.decode(base64EncodedKey, Base64.DEFAULT); PKCS8EncodedKeySpec pkcs8 = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(arithmetic); return keyFactory.generatePrivate(pkcs8); } }