我试着制作自己的SecKey
exponent:
let exponent = "10001"
modulus:
let modulus = "D6250B831F82EC984513922E797283E4D3879E1F0AD52364EBDA5A5696F6E75CDCE0704A993F3F95AA557A6882A525EC4B8344DA3E7DFDECCBACCEF18131E461D3C5D3D7E1334C6AE27E5CDEF8A577857542BCBEF6CF021B0EE5604534E6C6CBAEFA6EFFC1AB93DEE7CE51A8C8F2B7345680BDF840841C3A6F654CD1F10BA2FD5CA1C6E782A8FAEC79BD22FA12116D75FFAEDB2DEC151E0B60DB91F2E74BA78EFBB45DF739AF9CDD41C482DC22FC76E03C8E2141BDAE5406C0DA230E2C7EFFC68C8811E1544496332B03BCFF0F627A8DF51D2E2B32B0771D1C6F87AD56010DCB7A3862C63B88B2CF7D7AD40CC53AF0CFEC0820777C9CCE95A58848D67779AE8D"
Run Code Online (Sandbox Code Playgroud)
as publicKey加密Swift中的文本.有人能帮我吗?
这是我的代码:
import Foundation
import Security
class Encryption {
var publicKeyPtr, privateKeyPtr: Unmanaged<SecKey>?
var publicKey, privateKey: SecKey?
let parameters: [String:String] = [kSecAttrKeyType: kSecAttrKeyTypeRSA, kSecAttrKeySizeInBits: "2048"]
init(){
}
func genKey() {
let status = SecKeyGeneratePair(parameters, &publicKeyPtr, &privateKeyPtr)
publicKey = publicKeyPtr!.takeRetainedValue()
privateKey = privateKeyPtr!.takeRetainedValue()
}
func encrypt(plainText: String, publicKey: SecKey) -> [UInt8]{
let blockSize = SecKeyGetBlockSize(publicKey)
let plainTextData = [UInt8](plainText.utf8)
let plainTextDataLength = UInt(countElements( plainText))
var encryptedData = [UInt8](count: Int(blockSize), …Run Code Online (Sandbox Code Playgroud) 我想使用RSA加密数据,我试图在我的代码中生成密钥并且它正在工作,但我真正需要的是从服务器获取公钥作为字符串,然后将其用作Seckey,以便我可以使用它来加密使用RSA的数据,我试过这段代码:
//KeyString is the string of the key from server
let KeyData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
var cert : Unmanaged<SecCertificateRef>!;
var policy : Unmanaged<SecPolicy>!;
cert = SecCertificateCreateWithData(kCFAllocatorDefault, KeyData);
policy = SecPolicyCreateBasicX509();
var status : OSStatus = noErr
var trust: SecTrust?
var certArray : [Unmanaged<SecCertificateRef>!] = [cert];
var certArrayPointer = UnsafeMutablePointer<UnsafePointer<Void>>(certArray)
status = SecTrustCreateWithCertificates(cert, policy, trust);
let publicKey: SecKeyRef = SecTrustCopyPublicKey(trust!).takeUnretainedValue()
Run Code Online (Sandbox Code Playgroud)
我无法运行此代码,因为SecTrustCreateWithCertificates方法期望证书为anyObject!,我不知道如何解决这个问题,如果解决这个问题,我会得到SecKey.
我在objective-c中从这个答案得到了上面的代码
所以,如果任何人可以帮助我找到正确的代码来解决这个问题,我将非常感谢:)
encryption-asymmetric public-key-encryption ios swift seckeyref
我正在使用swift 3开发iOS应用程序.
我需要将一个SecKey(用户RSA公钥引用)导出到一个字符串(例如base64),以便通过生成的QRCode共享它.
它还必须以另一种方式工作,因为扫描的其他用户QRCode将能够SecKey从QRCode中提取的字符串重建引用.
我发现很少有教程,但我不明白我需要从SecKey引用中提取什么,我不知道如何将它转换为String.
我在从NSData创建 SecKey 时遇到了问题。基本上,我的客户端-服务器通信基于使用私钥创建的签名,并使用公钥在服务器上进行验证。
我正在两个设备之间实现会话传输,为了继续通信,我还需要传输这些密钥。我正在将 SecKey 转换为 NSData 并通过蓝牙发送它,但在另一边我无法将 NSData 转换为SecKey 回使用加密。
你能帮忙吗?
我想将 ECPublicKey 转换为 PEM 格式,如下所示
“-----开始公钥-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo0WcFrFClvBE8iZ1Gdlj+mTgZoJWMNE3kDKTfRny2iaguwuSYxo+jCnXqzkR+kyFK9CR3D+pypD1sGb1BnfWAA==-----结束公钥---- ——”
<SecKeyRef 曲线类型:kSecECCurveSecp256r1,算法 ID:3,密钥类型:ECPublicKey,版本:4,块大小:256 位,y:B6EEBB3791933312E10BD7C3D65C950AB7E1C325BCDB57A8663EB7B1E29BFA77,x:1D41FDAD2137 316D415B117227BCC465566E56A54E7B2B9B3A4B66C15A067611,地址:0x7f818850f6d0>
var error:Unmanaged<CFError>?
guard let cfdata = SecKeyCopyExternalRepresentation(publicKey, &error)
else { return }
let data:Data = cfdata as Data
let b64String = data.base64EncodedString()
Run Code Online (Sandbox Code Playgroud)
感谢这里的任何帮助
给定一个SecKey,有什么方法可以推断它的类型(例如是否是kSecAttrKeyTypeRSA或kSecAttrKeyTypeEC)?
我看到SecKeyGetTypeID(),但我不清楚该函数对哪个关键对象进行操作,因为它不接受任何参数。
下面是我的代码,它在 iOS 9 之前一直可以正常工作。
- (NSData *)encryptWithDataPublicKey:(NSString*)data keyTag:(NSString*)tag
{
SecKeyRef publicKey = NULL;
NSData *publicTag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]];
NSMutableDictionary *queryPublicKey =
[[NSMutableDictionary alloc] init];
[queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
[queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag];
[queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];
OSStatus status = SecItemCopyMatching
((__bridge CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKey);
NSData *encodedData = nil;
if (status == noErr && publicKey) {
NSData *dataToEncrypt = [data dataUsingEncoding:NSUTF8StringEncoding];
encodedData = [self encryptData:dataToEncrypt withKeyRef:publicKey];
CFRelease(publicKey);
}
return encodedData;
} …Run Code Online (Sandbox Code Playgroud)