ios怎么实现RASjava rsa加密解密实现

当前访客身份:游客 [
当前位置:
/android--1.html我的后台是用这个加密解密的,我用这个下面的ios网址加 密的http://blog.yorkgu.me//rsa-in-ios-using-publick-key- generated-by-openssl/。但是对接不上啊,java那边解出来的是乱码。
或者说谁有能用的java和ios一起的代码发我一份也好。谢谢了。
共有0个答案
更多开发者职位上
有什么技术问题吗?
进击的I...的其它问题
类似的话题RSA&加解密&IOS与JAVA
最近有个RSA加解密的项目:java端加密与ios手机客户端解密功能。
ios无论使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密自己都可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是无法创建报告个-9809或-50的错误,要么解出来是乱码。
ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不同。网上这种案例比比皆是,但是ios私钥加密的方式死活找不到。最后研究了下openssl,使用openssl库才解决了这个问题。使用openssl既可以使用公钥加密,也可以使用私钥进行加密,而且与java的加解密的结果相同。
ios与java加解密配置要相同,x.509、PCKS#8/RSA_PKCS1_PADDING等等。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。ios怎么实现RAS加密解密_百度知道
ios怎么实现RAS加密解密
  最近几天折腾了一下如何在iOS上使用RSA来加密。iOS上并没有直接的RSA加密API。但是iOS提供了x509的API,而x509是支持RSA加密的。因此,我们可以通过制作自签名的x509证书(由于对安全性要求不高,我们并不需要使用CA认证的证书),再调用x509的相关API来进行加密。接下来记录一下整个流程。  第一步,制作自签名的证书  1.最简单快捷的方法,打开Terminal,使用openssl(Mac OS X自带)生成私钥和自签名的x509证书。  openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650  按照命令行的提示输入内容就行了。  几个说明:  public_key.der是输出的自签名的x509证书,即我们要用的。  private_key.pem是输出的私钥,用来解密的,请妥善保管。  rsa:1024这里的1024是密钥长度,1024是比较安全的,如果需要更安全的话,可以用2048,但是加解密代价也会增加。  -days:证书过期时间,一定要加上这个参数,默认的证书过期时间是30天,一般我们不希望证书这么短就过期,所以写上比较合适的天数,例如这里的3650(10年)。  事实上,这一行命令包含了好几个步骤(我研究下面这些步骤的原因是我手头已经由一个private_key.pem私钥了,想直接用这个来生成x509证书,也就是用到了下面的2-3)  1)创建私钥  openssl genrsa -out private_key.pem 1024  2)创建证书请求(按照提示输入信息)  openssl req -new -out cert.csr -key private_key.pem  3)自签署根证书  openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650  2.验证证书。把public_key.der拖到xcode中,如果文件没有问题的话,那么就可以直接在xcode中打开,看到证书的各种信息。  第二步,使用public_key.der来进行加密。  1.导入Security.framework。  2.把public_key.der放到mainBundle中(一般直接拖到Xcode就行啦)。  3.从public_key.der读取公钥。  4.加密。  下面是参考代码(只能用于加密长度小于等于116字节的内容,适合于对密码进行加密。使用了ARC,不过还是要注意部分资源需要使用CFRealse来释放)RSA.h////
RSA.h//#import &Foundation/Foundation.h&@interface RSA : NSObject {
SecKeyRef publicK
SecCertificateR
SecPolicyR
size_t maxPlainL}- (NSData *) encryptWithData:(NSData *)- (NSData *) encryptWithString:(NSString *)@endRSA.m////
RSA.m//#import &RSA.h&@implementation RSA- (id)init {
self = [super init];
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@&public_key&
ofType:@&der&];
if (publicKeyPath == nil) {
NSLog(@&Can not find pub.der&);
NSDate *publicKeyFileContent = [NSData dataWithContentsOfFile:publicKeyPath];
if (publicKeyFileContent == nil) {
NSLog(@&Can not read from pub.der&);
certificate = SecCertificateCreateWithData(kCFAllocatorDefault, ( __bridge CFDataRef)publicKeyFileContent);
if (certificate == nil) {
NSLog(@&Can not read certificate from pub.der&);
policy = SecPolicyCreateBasicX509();
OSStatus returnCode = SecTrustCreateWithCertificates(certificate, policy, &trust);
if (returnCode != 0) {
NSLog(@&SecTrustCreateWithCertificates fail. Error Code: %ld&, returnCode);
SecTrustResultType trustResultT
returnCode = SecTrustEvaluate(trust, &trustResultType);
if (returnCode != 0) {
NSLog(@&SecTrustEvaluate fail. Error Code: %ld&, returnCode);
publicKey = SecTrustCopyPublicKey(trust);
if (publicKey == nil) {
NSLog(@&SecTrustCopyPublicKey fail&);
maxPlainLen = SecKeyGetBlockSize(publicKey) - 12;}- (NSData *) encryptWithData:(NSData *)content {
size_t plainLen = [content length];
if (plainLen & maxPlainLen) {
NSLog(@&content(%ld) is too long, must & %ld&, plainLen, maxPlainLen);
void *plain = malloc(plainLen);
[content getBytes:plain
length:plainLen];
size_t cipherLen = 128; // 当前RSA的密钥长度是128字节
void *cipher = malloc(cipherLen);
OSStatus returnCode = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plain,
plainLen, cipher, &cipherLen);
NSData *result =
if (returnCode != 0) {
NSLog(@&SecKeyEncrypt fail. Error Code: %ld&, returnCode);
result = [NSData dataWithBytes:cipher
length:cipherLen];
free(plain);
free(cipher);
}- (NSData *) encryptWithString:(NSString *)content {
return [self encryptWithData:[content dataUsingEncoding:NSUTF8StringEncoding]];}- (void)dealloc{
CFRelease(certificate);
CFRelease(trust);
CFRelease(policy);
CFRelease(publicKey);}@end使用方法:RSA *rsa = [[RSA alloc] init];if (rsa != nil) {
NSLog(@&%@&,[rsa encryptWithString:@&test&]);}else {
NSLog(@&init rsa error&);}
其他类似问题
为您推荐:
加密解密的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 java实现md5加密解密 的文章

 

随机推荐