Android RSA加密与SHA256算法工具类

转载:https://blog.csdn.net/wylong1991/article/details/78411018

Android开发中我们经常会用到各种加密,一般针对一些密码加密,下面给说一下RSA加密与SHA256算法的使用方法:
public class RsaHelper {

    /**
     *
     * rsa加密
     * @param s
     * @param publicKey
     * @return
     * @throws InvalidCipherTextException
     * @throws IOException
     */
    public static String encrypt(String s, String publicKey) throws InvalidCipherTextException, IOException {
        AsymmetricBlockCipher engine = new PKCS1Encoding(new RSAEngine());
        AsymmetricKeyParameter parameters = GetPublicKeyParameter(publicKey);
        engine.init(true, parameters);
        byte[] byteData = s.getBytes();
        byte[] ResultData = engine.processBlock(byteData, 0, byteData.length);
        return Base64.encodeToString((ResultData), Base64.NO_WRAP);
    }

    /**
     *
     * rsa解密
     * @param s
     * @param privateKey
     * @return
     * @throws InvalidCipherTextException
     * @throws IOException
     */
    public static String decrypt(String s, String privateKey) throws InvalidCipherTextException, IOException {
        AsymmetricBlockCipher engine = new PKCS1Encoding(new RSAEngine());
        AsymmetricKeyParameter parameters = GetPrivateKeyParameter(privateKey);
        engine.init(false, parameters);
        byte[] byteData = Base64.decode(s,Base64.NO_WRAP);
        byte[] ResultData = engine.processBlock(byteData, 0, byteData.length);
        return new String(ResultData);
    }

    private static AsymmetricKeyParameter GetPrivateKeyParameter(String key) throws IOException {
        String keypriv = key.replace("\r", "").replace("\n", "").replace(" ", "");
        byte[] privateInfoByte = Base64.decode(keypriv,Base64.NO_WRAP);
        AsymmetricKeyParameter priKey = PrivateKeyFactory.createKey(privateInfoByte);
        return priKey;
    }

    private static AsymmetricKeyParameter GetPublicKeyParameter(String key) throws IOException {
        String keypub = key.replace("\r", "").replace("\n", "").replace(" ", "");
        byte[] publicInfoByte = Base64.decode(keypub,Base64.NO_WRAP);
        AsymmetricKeyParameter pubKey = PublicKeyFactory.createKey(publicInfoByte);
        return pubKey;
    }

    /**
     * SHA256加密
     * @param content
     * @param secret
     * @return
     */
    public static String encrytSHA256(String content, String secret) {

        try {
            Security.addProvider(new BouncyCastleProvider());
            SecretKey secretKey = new SecretKeySpec(secret.getBytes(),
                    "HmacSHA256");
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            mac.init(secretKey);
            byte[] digest = mac.doFinal(content.getBytes());
            String sig = Base64.encodeToString((digest), Base64.NO_WRAP);
            return sig;
        } catch (Exception e) {
            throw new RuntimeCryptoException("加密异常");
        }
    }
}

参考:

https://www.cnblogs.com/yaoyu1983/p/12267809.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
医保局的加解密方法工具类需要根据具体的加解密算法来实现,以下是一些常见的加解密算法及其Java实现: 1. 对称加密算法 对称加密算法指的是加密和解密使用相同的密钥的加密算法,例如DES、3DES、AES等。常见的Java实现如下: - DES加解密: ``` import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class DesUtil { private static final String DES_ALGORITHM = "DES"; public static byte[] encrypt(byte[] data, byte[] key) { try { DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(DES_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static byte[] decrypt(byte[] data, byte[] key) { try { DESKeySpec dks = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(DES_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; String key = "12345678"; byte[] encryptedData = encrypt(data.getBytes(), key.getBytes()); System.out.println("encrypted data: " + new String(encryptedData)); byte[] decryptedData = decrypt(encryptedData, key.getBytes()); System.out.println("decrypted data: " + new String(decryptedData)); } } ``` - 3DES加解密: ``` import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; public class Des3Util { private static final String DES3_ALGORITHM = "DESede"; public static byte[] encrypt(byte[] data, byte[] key) { try { DESedeKeySpec dks = new DESedeKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES3_ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(DES3_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static byte[] decrypt(byte[] data, byte[] key) { try { DESedeKeySpec dks = new DESedeKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES3_ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(DES3_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; String key = "123456781234567812345678"; byte[] encryptedData = encrypt(data.getBytes(), key.getBytes()); System.out.println("encrypted data: " + new String(encryptedData)); byte[] decryptedData = decrypt(encryptedData, key.getBytes()); System.out.println("decrypted data: " + new String(decryptedData)); } } ``` - AES加解密: ``` import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AesUtil { private static final String AES_ALGORITHM = "AES"; public static byte[] encrypt(byte[] data, byte[] key) { try { SecretKeySpec secretKeySpec = new SecretKeySpec(key, AES_ALGORITHM); Cipher cipher = Cipher.getInstance(AES_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static byte[] decrypt(byte[] data, byte[] key) { try { SecretKeySpec secretKeySpec = new SecretKeySpec(key, AES_ALGORITHM); Cipher cipher = Cipher.getInstance(AES_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; String key = "1234567812345678"; byte[] encryptedData = encrypt(data.getBytes(), key.getBytes()); System.out.println("encrypted data: " + new String(encryptedData)); byte[] decryptedData = decrypt(encryptedData, key.getBytes()); System.out.println("decrypted data: " + new String(decryptedData)); } } ``` 2. 非对称加密算法 非对称加密算法指的是加密和解密使用不同的密钥的加密算法,例如RSA、DSA等。常见的Java实现如下: - RSA加解密: ``` import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class RsaUtil { private static final String RSA_ALGORITHM = "RSA"; public static byte[] encrypt(byte[] data, PublicKey publicKey) { try { Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static byte[] decrypt(byte[] data, PrivateKey privateKey) { try { Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); byte[] encryptedData = encrypt(data.getBytes(), publicKey); System.out.println("encrypted data: " + new String(encryptedData)); byte[] decryptedData = decrypt(encryptedData, privateKey); System.out.println("decrypted data: " + new String(decryptedData)); } catch (Exception e) { throw new RuntimeException(e); } } } ``` 3. 摘要算法 摘要算法指的是将任意长度的数据转换成固定长度的数据的算法,例如MD5、SHA-1、SHA-256等。常见的Java实现如下: - MD5摘要: ``` import java.security.MessageDigest; public class Md5Util { private static final String MD5_ALGORITHM = "MD5"; public static byte[] digest(byte[] data) { try { MessageDigest messageDigest = MessageDigest.getInstance(MD5_ALGORITHM); return messageDigest.digest(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; byte[] digest = digest(data.getBytes()); System.out.println("md5 digest: " + new String(digest)); } } ``` - SHA-1摘要: ``` import java.security.MessageDigest; public class Sha1Util { private static final String SHA1_ALGORITHM = "SHA-1"; public static byte[] digest(byte[] data) { try { MessageDigest messageDigest = MessageDigest.getInstance(SHA1_ALGORITHM); return messageDigest.digest(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; byte[] digest = digest(data.getBytes()); System.out.println("sha1 digest: " + new String(digest)); } } ``` - SHA-256摘要: ``` import java.security.MessageDigest; public class Sha256Util { private static final String SHA256_ALGORITHM = "SHA-256"; public static byte[] digest(byte[] data) { try { MessageDigest messageDigest = MessageDigest.getInstance(SHA256_ALGORITHM); return messageDigest.digest(data); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String data = "hello world"; byte[] digest = digest(data.getBytes()); System.out.println("sha256 digest: " + new String(digest)); } } ``` 以上是一些常见的加解密算法及其Java实现,具体的实现方式需要根据医保局的具体需求来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值