我试图通过分解N来找到D.左
我的@objc(PPSelectionIndexesCountIsExactlyOneTransformer)
public class PPSelectionIndexesCountIsExactlyOneTransformer: NSValueTransformer {
override public class func allowsReverseTransformation() -> Bool {
return false
}
override public class func transformedValueClass() -> AnyClass {
return NSNumber.self
}
override public func transformedValue(value: AnyObject?) -> AnyObject? {
var retval: AnyObject?
if let indexSet = value as? NSIndexSet {
retval = NSNumber(bool: indexSet.count == 1)
}
return retval
}
}
我找到了P& Q使用
N is 265291078722948385089717069136983657793
同样地,我发现ɸ使用
n = p.q
P - 14716976826788780483
Q -18026193955816294571
下一步说
ɸ = (p - 1).(q - 1)
现在我陷入了这一步,我无法继续。我不确定这是否是分解N以找到D的正确方法。
P.S - 最后一步是Select e; such that, e is relatively prime to ɸ and e < ɸ, gcd (e, ɸ) = 1
使用这个步骤我应该找到D.但是我仍然坚持到倒数第二步。
感谢任何帮助。 :)
编辑(答案): E = 65537(2 ^ 16 + 1),它是最常用的加密形式,并被广泛使用。
Select d; such that, d.e mod ɸ = 1 or e = 1 mod ɸ
现在只需使用上述逻辑来获取D的可能值:)
答案 0 :(得分:0)
我建议先从e = 3开始,然后尝试e = 5,7,11等等。 满足的条件是
(d * e) % φ(n) = 1
在你的例子中φ(n)= 265291078722948385056973898354378582740
所以,为了找到d,我会做一个表
For e=3, d = (φ(n)+1) / e
= 265291078722948385056973898354378582741 / 3
= 88430359574316128352324632784792860913
现在找到e = 5,7等等
答案 1 :(得分:0)
您不需要猜测e
,因为它是公共指数,它应该在公共场所与公共密钥n
一起出现在(e, n)
一对。否则你有一半的密钥,ɸ(n)
的任何数字联合,gcd(e, ɸ(n)) = 1
是候选公共指数。
在对模n
进行分解之后,你已经完成了很多工作。只需使用公开指数e
,然后找到e (mod ɸ(n))
的{{3}},即d . e ≡ 1 (mod ɸ(n))
。您必须获得d
,因为e
和ɸ(n)
必须是共同素数才能获得反转。