RSA+Base64加密

这段时间要做一个业务需求,说是为了安全起见把数据请求用RSA加密。然后咨询了下后台是怎么个加密方法,然后后台就给了个公钥和私钥,说,公钥加密,私钥加签,之后再Base64加密。上网搜索,整理了下,就得出如下结论,话不多说,直接上代码:

注意:RSA的公私密有格式的区分:PKCS#1 和 PKCS8,PKCS#1 是php使用的,PKCS8为java和客户端使用。切记

  • 首先!来个宏
#define PublicKEY  @"后台提供的公钥字符串"
#define PrivateKey @"后台提供的私钥字符串"
  • 其次,我们要用到一个第三方,这个第三方叫**HBRSAHandler**
导入头文件
 - #import "HBRSAHandler.h"
 HBRSAHandler这个库在使用的时候,这个只需要在Build Setting 里面的 Header search 
 path 和Library search path 这两个路径,把 HBRSAHandler里面的openssl里面的inc
 lude里面的openssl路劲拖进去就可以了。

然后,我们写入公钥和私钥

 HBRSAHandler* handler = [HBRSAHandler new];
    [handler importKeyWithType:KeyTypePrivate andkeyString:PrivateKey];
    [handler importKeyWithType:KeyTypePublic andkeyString:PublicKEY];

再接着,我们将需要加密和加签的值传入

  NSDictionary * cifCustomerDic = @{@"key":@"value"};
  (这里我们是传的json)
    
    //公钥加密之后的值:
    NSString * pubStr ;
    pubStr = [self dictionaryToJson:cifCustomerDic];
    pubStr =  [handler encryptWithPublicKey:pubStr];

    
    //私钥签名之后的值:
    NSString * priStr;
    priStr = [self dictionaryToJson:cifCustomerDic];
    priStr = [handler signString:perStr];

这里最后获取到的pubStr就是RSA公钥加密,再Base64加密之后的值
priStr就是RSA私钥加签,再Base64加密之后的值。

注意:[handler encryptWithPublicKey:pubStr]和 [handler signString:perStr];这两个返回值是RSA加密又Base64 加密之后的值。

附上Json转字符串的方法

#pragma mark - 字典转字符串
- (NSString*)dictionaryToJson:(NSDictionary *)dic
{
    NSError *parseError = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA是一种非对称加密算法,用于加密和解密数据。在Java中,可以使用Java内置的RSA算法库来实现RSA加密和解密,并使用Base64进行数据的编码和解码。 首先,你需要生成RSA密钥对。可以使用`KeyPairGenerator`类来生成密钥对,然后将公钥和私钥分别保存起来。 ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.util.Base64; public class RSAExample { public static void main(String[] args) throws NoSuchAlgorithmException { // 生成RSA密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 获取公钥和私钥 PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); // 将公钥和私钥转换为Base64字符串 String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKey.getEncoded()); String privateKeyBase64 = Base64.getEncoder().encodeToString(privateKey.getEncoded()); System.out.println("公钥: " + publicKeyBase64); System.out.println("私钥: " + privateKeyBase64); } } ``` 接下来,你可以使用生成的公钥进行数据的加密使用私钥进行数据的解密。 ```java 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 java.util.Base64; import javax.crypto.Cipher; public class RSAExample { public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException { // 公钥和私钥的Base64字符串 String publicKeyBase64 = "your-public-key-base64"; String privateKeyBase64 = "your-private-key-base64"; // 将Base64字符串转换为公钥和私钥 byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyBase64); byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyBase64); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes)); PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); // 加密数据 String plaintext = "Hello, RSA!"; byte[] ciphertext = encrypt(publicKey, plaintext.getBytes()); // 解密数据 byte[] decryptedTextBytes = decrypt(privateKey, ciphertext); String decryptedText = new String(decryptedTextBytes); System.out.println("加密后的数据: " + Base64.getEncoder().encodeToString(ciphertext)); System.out.println("解密后的数据: " + decryptedText); } // 使用公钥进行数据加密 public static byte[] encrypt(PublicKey publicKey, byte[] plaintext) { try { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(plaintext); } catch (Exception e) { e.printStackTrace(); } return null; } // 使用私钥进行数据解密 public static byte[] decrypt(PrivateKey privateKey, byte[] ciphertext) { try { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(ciphertext); } catch (Exception e) { e.printStackTrace(); } return null; } } ``` 以上代码演示了如何使用Java中的RSA算法和Base64进行加密和解密。请将`your-public-key-base64`和`your-private-key-base64`替换为实际的公钥和私钥的Base64字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值