iOS用OC实现base58加/解密

前言

由于最近项目中用到base58加密解,所以就顺便记录一下了。如有错误请留言指教。
本文是参考js的实现方式转换过来的。如有冒犯,请原谅。
base58在线转换工具

base58原理、编码表

Base58加密原理:和通常base64编码一样,base58编码的作用也是将非可视字符可视化(ASCII化)。但不同的是base58编码去掉了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。
在这里插入图片描述

定义字符集

	@property (nonatomic, strong) NSString *ALPHABET;
	@property (nonatomic, strong) NSMutableDictionary *ALPHABET_MAP;

    // 先存ALPHABET_MAP(方便后期检查当前是否为Base58编码)
    self.ALPHABET = @"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
    self.ALPHABET_MAP = [NSMutableDictionary dictionary];
    for(int i = 0; i< [self.ALPHABET length]; i++) {
   
        NSString *temp = [self.ALPHABET substringWithRange:NSMakeRange(i,1)];
        [self.ALPHABET_MAP addEntriesFromDictionary:@{
    temp: @(i) }];
    }
    //NSLog(@"%@", self.ALPHABET_MAP);
    // 得到对象ALPHABET_MAP ---> {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, A: 9, B: 10, C: 11, D: 12, E: 13, …, y: 56, z: 57}
    
    [self base58Encode:@"aa真棒66"];
    [self base58Decode:@"6UKrcvVZK6GzQM"];
    

加密

#pragma mark - 加密
// base58加密, 传入加密后的字符串
- (NSString *)base58Encode:(NSString *)string {
   
    if (string.length == 0) {
   
        return @"";
    }
    
    NSArray *byteArr = [self UTF8ArrayWithString:string]; // aa真棒66 ==> [97, 97, 231, 156, 159, 230, 163, 146, 54, 54]
    if (byteArr.count <= 0) {
   
        return @"";
    }
    
    int BASE = 58;
    NSMutableArray *digits = [@[@(0)] mutableCopy];
    
    for (int i = 0; i < byteArr.count; i++) {
   
        for (int j = 0; j < digits.count; j++) {
   
            // 将数据转为二进制,再位运算右边添8个0,得到的数转二进制
            // 位运算-->相当于 digits[j].toString(2);parseInt(10011100000000,2)
            digits[j] = @([digits[j] intValue] << 8);
        }
        
        digits[0] = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值